передача параметра в has_many через ассоциацию

#ruby-on-rails-4 #activerecord #nested-attributes #has-many-through

#ruby-on-rails-4 #activerecord #вложенные атрибуты #имеет много сквозных

Вопрос:

У меня есть класс 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 я хочу передать значение столбца order Testquestion .

 def create
   Test.create(test_params)
end

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

Как мне передать значение order столбца, чтобы связанная модель (Testquestion) обновлялась.

Ответ №1:

Нет способа сделать это таким образом, вам нужно будет выбрать более длинный путь.

  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])

постскриптум: вы действительно должны приобрести привычку называть свои поля и переменные snake_case и свои классы CamelCase .