実現したいこと
- アソシエーションを利用し、user_idを通じて、他のテーブルにある情報をビューに表示させたいです。
- 具体的には、
habits/index.html.erb
に、rulesテーブルの値(カレントユーザー分のみ)を表示させたいです。
テーブルの状況
usersテーブル
users | |
---|---|
PK | id |
habitsテーブル →ここのindexページに
habits | |
---|---|
FK | user_id |
rulesテーブル →ここの「if_rule」と「then_rule」を載せたい
rules | |
---|---|
FK | user_id |
if_rule | |
then_rule |
アソシエーションの状況
userモデル
- has_many :habits
- has_one :rule
habitモデル
- belongs_to :user
- has_one :rule
ruleモデル
- belongs_to :user
- belongs_to :habit
わからないこと
- rulesのMVCを作成。
user_id
、if_rule
、then_rule
を保存できるようになった。 - しかし、habitモデルとのアソシエーションを組んだところ、「1.」において、保存できなくなってしまった。
ruby
1# テストコードを実行すると、habitモデルの情報を入力するようエラー 2Failures: 3 4 1) Rule イフゼンルールの登録 イフゼンルールの保存ができるとき 全ての入力事項を、入力していると登録できる 5 Failure/Error: @rule = FactoryBot.create(:rule) 6 7 ActiveRecord::RecordInvalid: 8 バリデーションに失敗しました: Habitを入力してください 9 # ./spec/models/rule_spec.rb:4:in `block (2 levels) in <top (required)>'
-
今回、他テーブルの情報を表示させたいだけであり、rulesテーブルに、habitに関する情報を保存する必要はないのですが、アソシエーションを組む=マイグレーションファイルにおいて
habit_id
を保存できるようにカラム変更し、ストロングパラメーターを再定義しないと使用できないのでしょうか? -
またその際に、
merge
に対して、複数ある場合の情報の乗せ方が分からず苦慮しています。
ruby
1# ストロングパラメーター 2 def rule_params 3 params.require(:rule).permit(:if_rule, :then_rule).merge(user_id: current_user) 4 end
- 3つのテーブルがあり、共通のuser_idに対する他の情報を、もう一方のindexページに表示させたい方法が分かりません。
どうぞよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/14 02:32