2016-08-22 9 views
0

Я надеюсь, что это легко .... =)Pass новый идентификатор объекта в создании контроллера рубин на рельсах

У меня есть объект вопрос и объект favanswer, вопрос HAS_ONE favanswer, favanswer belongs_to вопрос , У меня есть столбец favanswer_id и индекс в моей модели вопросов, я пытаюсь передать недавно опубликованный файл favanswer_id в соответствующее поле favanswer_id объектов вопросов. Может быть, это намного больше ... или меньше .. сложнее, чем это. Но в favanswer_controller у меня есть следующее в действии create, и я просто пытаюсь выяснить, как исправить строку 6 или что мне нужно сделать , потому что без 6 он отлично работает, он просто не обновляет мою модель вопроса ... Help?

1 def create 
    2 
    3 @answer = Answer.find(params[:answer_id]) 
    4 @question = @answer.question_id 
    5 Favanswer.create(favanswer_params.merge(user: current_user, question_id: @question)) 
    6 Question.update(@question, :favanswer_id => "HOW DO I PASS THE NEW FAVANSWER ID HERE?") 
    7 redirect_to question_path(@question) 
    8 
    9 end 

ответ

0

SMH ...

понял это =)

@L = Favanswer.create(favanswer_params.merge(user: current_user, question_id: @question)) 
Question.update(@question, :favanswer_id => @L.id) 
+0

Это происходит потому, что вы имеете в виду вопрос id, а не вопрос. Вы пробовали '@L = Favanswer.create (favanswer_params.merge (user: current_user, question: @question)' Я считаю, что если вы ссылаетесь на ассоциацию, а не на внешний ключ, Rails будет делать правильную вещь. – jaydel

+0

пункт уточнения : '@question = @ answer.question_id' должно быть' @question = @ answer.question' в моем комментарии выше. – jaydel

1

Я думаю, что ошибка, которую вы делаете здесь со ссылкой на внешний ключ ассоциации напрямую. Вместо этого полагайтесь на ассоциацию как объект. Когда вы создаете Favanswer, перейдите в объект @answer.question, а не идентификатор. Кроме того, не передать его в question_id, а скорее question

def create 
    @answer = Answer.find(params[:answer_id]) 
    @question = @answer.question 
    Favanswer.create(favanswer_params.merge(user: current_user, question:  @question)) 
    redirect_to question_path(@question) 
end 

Rails является дружественным и добрым, и когда вы задаете экземпляр Вопрос к названному ассоциации, он будет подключить его по мере необходимости, так что у вас нет необходимо обновить вопрос напрямую.

1

Model.create возвращает экземпляр созданной модели, полезной для того, что вы пытаетесь сделать. Это означает:

@favanswer = Favanswer.create(favanswer_params.merge(user: current_user, question_id: @question)) 
Question.update(@question, :favanswer_id => @favanswer.id) 

Выполняет то, что вам нужно.