2013年5月6日月曜日

Railsで親テーブルの情報を指定してfindするサンプル


上図のような親子関係の場合に、親テーブル(Todoufuken)から子テーブル(Shichoson)をincludeして、子テーブルの情報を指定してfindするというサンプルは既にあるようだ。

[memo][Rails]連携先テーブルの条件を指定してfind
http://bugcloud.com/?p=571

実際に、下記のように記述すると実現できる。
Todofuken.all(:include => :shichosons, :conditions => ["shichosons.name = ?", '名古屋市'])
ところが、同様の記述で、子テーブル(Shichoson)から親テーブル(Todoufuken)をincludeして、親テーブルの情報を指定してfindしようとしても、うまくいかない。
Shichoson.all(:include => :todofuken, :conditions => ["todofuken.name = ?", '愛知県'])
ちなみに、findのincludeではなく、下記のように子テーブルを特定した上でリンクした記述では動作している。
Shichoson.first.todofuken.name
conditionsの部分のテーブル名の指定は、model側で単数形でbelongs_toとなっている場合でも、
class Shichoson < ActiveRecord::Base
  belongs_to :todofuken
end
このように複数形を指定する必要があるようだ。
Shichoson.all(:include => :todofuken, :conditions => ["todofukens.name = ?", '愛知県'])
シンボル(:xxxx)として指定した場合と、実際のテーブル名("xxxxs")として指定した場合の違いということなのだろうが、統一感がなくてややこしい。。

今回は、下記の記事を参考にさせていただいた。

rails:3610
http://www.fdiary.net/ml/rails/msg/3610

0 件のコメント:

コメントを投稿