Model 嵌套表单有许多模型。如何从嵌套项中获取id?

Model 嵌套表单有许多模型。如何从嵌套项中获取id?,model,ruby-on-rails-3,Model,Ruby On Rails 3,我有一个嵌套的形式,结构化的:这个问题有很多答案。所以,问题是多项选择题 当前表单视图: - semantic_form_for @question do |f| = f.error_messages - f.inputs do = f.input :question = f.semantic_fields_for :answers do |builder| = builder.input :content, :label => "Answer", :i

我有一个嵌套的形式,结构化的:这个问题有很多答案。所以,问题是多项选择题

当前表单视图:

- semantic_form_for @question do |f|
  = f.error_messages
  - f.inputs do
    = f.input :question
    = f.semantic_fields_for :answers do |builder|
      = builder.input :content, :label => "Answer", :input_html => { :class => {'required', ' ckeditor'}}
    = f.buttons
我的问题控制器看起来像:

  def new
    @question = Question.new
    4.times { @question.answers.build }
  end

  def create
    @question = Question.new(params[:question])
    @question.user_id = current_user.id
    if @question.save
      flash[:notice] = "Question added."
      redirect_to questions_url
    else
      render :action => 'new'
    end
  end

都很简单。但是,现在我想在添加时“选择”正确答案,最好是在同一页上。我想我会在包含“CorrectAnswerId”的问题中添加一个新的专栏。但是,如何将其添加到视图和控制器中?

我假设您会使用某种复选框方法来指示“这是正确的答案”

在这种情况下,您可以简单地让复选框包含答案的id,然后在
create
上,您可以将
correct\u answer\u id
列设置为该复选框的id值

但是,由于此时尚未保存答案(build仅在内存中创建对象),因此在答案保存之前,您没有ID。最简单的解决方法是在答案表中,而不是在问题表中,将答案标记为正确。然后您可以在
问题
模型中创建一个方法,如下所示:

def correct_answer
    @correct ||= answers.where(:is_correct => true)
end
这也将使您能够在需要时允许多个正确答案。
如果不需要这样做,您可以始终只在查询字符串的末尾添加
.first
,以便返回一个答案,而不是一组正确答案。

thx lukas!工作完美无瑕。我做了一个简单的jquery检查,以确保一次只选中一个复选框,同样有效!:)