Ruby on Rails のリレーションの設定は下記の通りで合っているでしょうか?

もしくは、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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/01/25 23:44:33
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:kakicg No.1

回答回数44ベストアンサー獲得回数3

ポイント60pt

リレーションの定義はあってると思います。

推測ですが、「@都道府県.地方」に値が入っていないというエラーではないでしょうか?

あるいはテーブル「都道府県」に地方_id列がないと言っているのかも…

http://open-cal.jp/

id:littlebangkok

回答ありがとうございます。

まわりに聞ける人がいないので、回答してもらって助かりました。

原因が分かりました。

規約上、belongs_to(モデル名) と記述すべきところを間違えて belongs_to(モデル名 + 複数形) と

記述していました。

2時間ほど、rake の結果とソースのにらめっこで、今はテストが通るようになりました。

2008/01/25 23:43:08

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません