上図のような親子関係の場合に、親テーブル(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.nameconditionsの部分のテーブル名の指定は、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 件のコメント:
コメントを投稿