嵌套属性,将current_user.id传递给嵌套模型

vit*_*des 1 ruby-on-rails nested-attributes ruby-on-rails-3

我有3个模型:用户,答案和问题。

user.rb

 has_many :questions
 has_many :answers
Run Code Online (Sandbox Code Playgroud)

Question.rb

 has_many :answers
 belongs_to :user
 accept_nested_attributes_for :answers
Run Code Online (Sandbox Code Playgroud)

answer.rb

 belongs_to :question
 belongs_to :user
Run Code Online (Sandbox Code Playgroud)

在questions / show.html.erb中

 form_for @question do |f|
   f.fields_for :answers, @question.answers.build do |builder|
     builder.text_area, :body
   end

   f.submit
 end
Run Code Online (Sandbox Code Playgroud)

Submit调用问题#update动作,由于嵌套了资源,新答案将被保存在数据库中。我想知道:user_id提交问题后,如何将答案列保存在数据库中?提交表格后,我能以某种方式通过current_user.id答案user_id栏吗?

小智 5

您必须在控制器的create动作中传递用户参数(也应在控制器中构建嵌套属性):

def new
  @question = Question.new
  @question.answers.build
end

def create
  @question = current_user.questions.new(params[:questions])
  //The line below is what will save the current user to the answers table 
  @question.answers.first.user = current_user

  ....
end 
Run Code Online (Sandbox Code Playgroud)

因此,您的视图的形式应类似于:

form_for @question do |f|
   f.fields_for :answers do |builder|
     builder.text_area, :body
 end

 f.submit
Run Code Online (Sandbox Code Playgroud)

结束