人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: littlebangkok
●カテゴリ:インターネット ウェブ制作
✍キーワード:.new ActiveRecord base Class def
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● kakicg
●60ポイント

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

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

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

http://open-cal.jp/

◎質問者からの返答

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

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

原因が分かりました。

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

記述していました。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ