如何为多对多关系设置强参数

时间:2016-09-03 00:49:39

标签: ruby-on-rails strong-parameters

我有一个模型isset($_POST['name']),通过联结表Word有多对多关系Translationword_to_words本身就是Translation类。

这些是它的源代码。

应用程序/模型/ word.rb

Word

应用程序/模型/ word_to_word.rb

class Word < ApplicationRecord
  has_many :word_to_words
  has_many :translations, through: :word_to_words
end

应用程序/视图/字/ _form.html.erb

class WordToWord < ApplicationRecord
  belongs_to :word
  belongs_to :translation, class_name: 'Word'
end

应用程序/控制器/ words_controller.rb

<%= form_for(word) do |f| %>
  <%= f.text_field :name %>
  <%= f.fields_for :translations, word.translations.build do |q| -%>
    <%= q.text_field :name %>
  <% end -%>
  <%= f.submit %>
<% end %>

当我创建新词时,def word_params params.require(:word).permit(:name, :pronunciation, word_to_words_attributes: [:word_id, :translation_id], translations_attributes: [:id, :name] ) end 变量被拒绝,错误为translation

Unpermitted parameter

我认为这是因为我的强参数配置错误。 我该如何设置强参数?

1 个答案:

答案 0 :(得分:0)

你应该使用nested_attributes。

class Word < ApplicationRecord
  has_many :word_to_words
  has_many :translations, through: :word_to_words
  accepts_nested_attributes_for :translations
end

迁移可以:

class CreateWordToWords < ActiveRecord::Migration[5.0]
  def change
    create_table :word_to_words do |t|
      t.belongs_to :word, index: true, foreign_key: true
      t.belongs_to :translation, index: true, foreign_key: true

      t.timestamps
    end
  end
end