我目前正在尝试创建一项调查,该调查将使用存储在表格中的问题。我已经从rails casts中读过nested model form part 1但是由于问题没有在调查中显示,我没有到达任何地方。
我有三个表,一个表有问题的文本,另一个表保存谁进入调查的记录,另一个表保存用户对问题的答案。
变量表: name:varchar id:整数
报告表 员工姓名:varchar 日期:日期 id:整数
report_variable table question_id REPORT_ID 答案
为报告/新修改的代码:
# GET /reports/new
# GET /reports/new.json
def new
@report = Report.new
#variable = @report.variable.build #dont know what to do here, gives an error with report_id
respond_to do |format|
format.html # new.html.erb
format.json { render json: @report }
end
end
修改后的报告/ _form.html.erb
<div >
<%= f.fields_for :variable do |builder| %>
<%= render variable_fields, :f => builder %>
<% end %>
</div>
创建了report / _variable_fields.html.erb
<p>
<%= f.label :name %>
<%= f.text_field :name, :class => 'text_field' %>
<p>
report_variable的模型
class ReportVariable < ActiveRecord::Base
attr_accessible :report_id, :value, :variable_id
has_and_belongs to many :reports
has_and_belongs to many :variables
end
报告模型
class Report < ActiveRecord::Base
attr_accessible :employeeName
has_many :report_variable
has_many :variable
accepts_nested_attributes_for :report_variable
accepts_nested_attributes_for :variable
end
很抱歉,如果这是一个简单的问题,我对rails很新。
答案 0 :(得分:2)
欢迎使用Rails!
我认为简单的答案是字段没有显示,因为没有任何嵌套记录。您可以通过取消注释variable
行来解决这个问题:
def new
@report = Report.new
@report.variables.build #this line creates 1 new empty variable, unsaved.
respond_to do |format|
format.html # new.html.erb
format.json { render json: @report }
end
end
如果您想要多个变量,请调用以下内容:
3.times { @report.variables.build }
这样你在表单助手中放置的@report
对象就会有三个变量。这应该让你再次移动,更难的是添加ajax添加/删除变量,但如果你知道有多少提前,你不必处理。