Rails 4:不在窗体上显示的嵌套属性

时间:2014-07-31 17:54:08

标签: ruby-on-rails ruby-on-rails-4

我正在尝试运行一个简单的nested_attributes练习,其中一个问题有很多答案(生活是怎样的?)。我无法获得答案字段以显示在“' new'或者编辑'动作。据我所知,我正在严格遵守规范。显然,事实并非如此。任何指针都表示赞赏,谢谢。

模型

# question.rb
has_many :answers
accepts_nested_attributes_for :answers

# answer.rb
belongs_to :question

查看

# _form.html.erb
<%= form_for(@question) do |f| %>
  ...
  <div class="field">
    <%= f.label :content, 'Question' %><br>
    <%= f.text_field :content %>
  </div>

  <div class="field">
        <% f.fields_for :answers do |ff| %>
        <%= ff.label :content, 'Answer' %><br>
        <%= ff.text_field :content %>
        <% end %>
  </div>
  ...
<% end %>

控制器

# questions_controller.rb
def new
  @question = Question.new
  @question.answers.build
end

def edit
end

def create
  @question = Question.new(question_params)

  respond_to do |format|
    if @question.save
      format.html { redirect_to @question, notice: 'Question was successfully created.' }
      format.json { render :show, status: :created, location: @question }
    else
      format.html { render :new }
      format.json { render json: @question.errors, status: :unprocessable_entity }
    end
  end
end

private 

def question_params
  params.require(:question).permit(:content, answer_attributes: [:id, :content, :question_id] )
end

2 个答案:

答案 0 :(得分:2)

使用<%=,而不是<%,否则field_for表单生成器的结果输出将不会输出到表单。

<%= f.fields_for :answers do |ff| %>

答案 1 :(得分:1)

  

现在我只需要弄清楚为什么嵌套属性(答案)   没有保存到数据库。

扩展 @Dylan Markow 的答案。

由于它是has_many answers,因此answers_attributes方法应该是answer_attributes而不是question_params

def question_params
  params.require(:question).permit(:content, answers_attributes: [:id, :content, :question_id] )
end