通过关联在 has_many 中传递参数

passing parameter in has_many through association

我有一个 class Test, Question, Testquestion 关联 has_many through

class Test
  has_many :testquestions
  has_many :questions, through: :testquestions
end

class Question
  has_many :testquestions
  has_many :tests, through: :testquestions
end

class Testquestion
  belongs_to :test
  belongs_to :questions
end

创建 Test 时,我想传递 Testquestionorder 列的值。

def create
   Test.create(test_params)
end

def test_params
  params.require(:test).permit(:testname,question_attributes:[:questionname])
end

我应该如何传递 order 列的值以便更新相关模型(Testquestion)。

没有办法那样做,你需要走更长的路。

  1. 不要忘记将 accepts_nested_attributes_for 添加到您的关联中,以便嵌套操作实际起作用。
  2. 检查您是否已将 accepts_nested_attributes_for :question 添加到 Testquestion
  3. 让您的参数结构正确。

像这样:

{
  test: {
    testname: 'someName',
    testquestion_attributes: {
      order: someOrder,
      question_attributes: {
        questionname: 'someName'
      }
    }
  }
}
  1. 需要你的参数。

params.require(:test).permit(:testname, testquestion_params: [:id, :order, :_destroy, question_params: [:id, :questionname])

p.s。旁注:您真的应该养成在 snake_case 中命名您的字段和变量以及在 CamelCase.

中命名您的 类 的习惯