Как я могу связать 2 модели с другой в моем действии создания - PullRequest
0 голосов
/ 21 сентября 2010

У меня есть 3 модели со следующими ассоциациями. Модель Вопрос принадлежит конкретному пользователю и имеет много ответов, модель Ответа принадлежит как пользователю, так и вопросу. Поэтому у модели пользователя много вопросов и ответов. В моей модели ответов есть поля User_id и question_id, которые определяют владельца вопроса, на который публикуется ответ, и который создал или владеет этим вопросом. Итак, как мне назначить идентификаторы пользователя и вопроса для ответа на моё действие создания и какова структура ссылки в моем представлении для публикации ответа. Другой вопрос, это лучший способ это сделать. Моя цель состоит в том, чтобы отображать вопросы и ответы пользователей на панели пользователя таким образом, чтобы, если пользователь просматривает вопрос, он мог видеть ответы на этот вопрос и наоборот.

1 Ответ

0 голосов
/ 22 сентября 2010

Краткий ответ:

Answer.create(params[:answer].merge(:question_id => @question.id, :user_id => @user.id)

или

@question.asnwers.create(params[:answer].merge(:user_id => @user.id)

или

@user.answers.create(params[:answer].merge(:question_id => @question.id)

Длинный ответ, я предполагаю, что вы можете получить зарегистрированного пользователя,и у вас есть маршрут, определенный как:

map.resources :questions, :has_many => [:answers]

Итак, ваши маршруты такие: example.com/questions/:question_id/answers.И тогда вы делаете в контроллере @question = Question.find(params[:question_id])

Я не понимаю, что вы подразумеваете под структурой ссылки для публикации нового ответа.Сначала вам нужна ссылка на новое, что-то вроде link_to («Новый ответ», new_question_answer_path (@question)).

Затем в контроллере:

def new
  @question = Question.find(params[:question_id])
  @answer = Answer.new
end

В представлении для нового:

<% form_for :answer, [@question, @answer] do |f| %>
  Your form stuff
<% end %>

И тогда у вас будет действие создания ... У меня нетЯ не пробовал этот код, но вы поняли, верно?

...