我正在尝试运行一个简单的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
答案 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