質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

629閲覧

中間テーブルにデータの保存ができない

nasuk47

総合スコア311

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/11/24 06:35

編集2019/11/24 12:35

フォーム投稿時にメンバーのidとコメントのidを紐付けて保存したい

中間テーブルとmemberのテーブルにデータが保存できない

発生している問題・エラーメッセージ

ArgumentError in CommentsController#new Unknown key: :allow_destory. Valid keys are: :allow_destroy, :reject_if, :limit, :update_only

該当のソースコード

model

1class MemberComment < ApplicationRecord 2 belongs_to :member 3 belongs_to :comment 4end 5

model

1class Member < ApplicationRecord 2 has_many :use_members 3 has_many :user, through: :user_members 4 has_many :member_comments 5 has_many :comments, through: :member_comments 6end

model

1class Comment < ApplicationRecord 2 has_many :user_commnents 3 has_many :user, through: :user_comments 4 has_many :member_comments 5 has_many :member, through: :member_comments 6 accepts_nested_attributes_for :member_comments, allow_destroy: true 7end

controller

1class CommentsController < ApplicationController 2 def index 3 @comments = Comment.all 4 end 5 6 # def show 7 # end 8 9 def new 10 @comment = Comment.new 11 @comment.member_comments.build 12 end 13 14 def create 15 @comment = Comment.new(comment_params) 16 if @comment.save 17 redirect_to comments_path 18 else 19 render :new 20 end 21 end 22 23 def update 24 end 25 26 def destory 27 end 28 29 private 30 def comment_params 31 params.require(:comment).permit(:place, :text, :image_url, member_comments_attributes:[:member_id]) 32 end 33end 34

haml

1.contents 2 .form 3 = form_for @comment do |f| 4 = fields_for :members do |m| 5 = m.collection_select :member_id, Member.all, :id, :name, include_blank: true 6 = f.text_field :place, class: 'form__place', placeholder: '観光地を入力してください' 7 = f.text_area :text, class: 'form__review', placeholder: '感想(コメント)を入力してください' 8 = f.text_field :image_url, class: 'form__image', placeholder: '画像のURLを貼り付けてください' 9 = f.submit

試したこと

中間テーブルのモデルにvalidate: member_comment_id, presence: true
を入れてみたがSyntaxError のエラーが出る

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

1)Comment と Member が 多対多 というのが解せません。
Membarが複数のコメントを作成する、というのはわかります。
コメントは複数のメンバーが関わるのでしょうか?
has_many comments
belongs_to member
ではないでしょうか

多対多であるとして
2)中間テーブルがを作成することで関係つける という方法もありますが、
関係するmemberを代入するという方法もあります。
@comment.members = members とか(そうとっかえ)
@comment.members < member とか (一人追加)
この方が簡単かと思います。

3)関連つけられるmemberはどうやって決まるのでしょうか
commentを作成する人である のならば new 画面で入れる必要はありません
commentを作成する人が 既存のメンバーの中から選ぶ のでしたら、

= fields_for(@member) do |member| = member.text_field :name,

の部分、select で Memberから選ぶ様にするのが良いのでは

投稿2019/11/24 11:50

編集2019/11/24 12:03
winterboum

総合スコア23284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nasuk47

2019/11/24 12:13

userがcommentを投稿できるようにしてそこにmemberを関連づけてそのコメントには複数のメンバーを関連づけれるようにしたいと思っています。 がメンバーは決まっているのであらかじめ用意してselectで選ぶ方法も考えてみます。
winterboum

2019/11/24 22:42

なるほど、多対多ですね。 質問の本筋から外れてたので書きませんでしたが class Member < ApplicationRecord has_many :use_members ここ user_members ですね
nasuk47

2019/11/25 01:31

回答ありがとうございます。修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問