もしくは、1(Aテーブル)対多(Bテーブル)と1(Bテーブル)対多(Cテーブル) というリレーションは可能なのでしょうか?
例えばわかりやすく説明をすると(クラス名は直感的にわかりやすくするために日本語にしました)、
class 地方 < ActiveRecord::Base
has_many(:都道府県)
end
class 都道府県 < ActiveRecord::Base
belongs_to(:地方)
has_many(:市区町村)
end
class 市区町村 < ActiveRecord::Base
belongs_to(:都道府県)
end
という感じです。
今、上記のような設定で開発を行っているのですが、都道府県を新規に登録する際に、
@都道府県.地方 の地方メソッドが定義されていないとエラーが表示されとテストで失敗しています。
def register_都道府県
@都道府県 = 都道府県.new(params[:id])
if @都道府県.save
flash[:notice] = '新規登録成功'
redirect_to(:action => 'show_都道府県', :id => @都道府県.地方)
else
(中略)
end
end
リレーションの定義はあってると思います。
推測ですが、「@都道府県.地方」に値が入っていないというエラーではないでしょうか?
あるいはテーブル「都道府県」に地方_id列がないと言っているのかも…
回答ありがとうございます。
まわりに聞ける人がいないので、回答してもらって助かりました。
原因が分かりました。
規約上、belongs_to(モデル名) と記述すべきところを間違えて belongs_to(モデル名 + 複数形) と
記述していました。
2時間ほど、rake の結果とソースのにらめっこで、今はテストが通るようになりました。