我只想显示1个输入字段,这样我就可以填充我的列表了。但是,每个保存的数据都是输入字段。我该如何防止这种情况?我只想显示列表和1个输入字段。
这是我的控制者:
def show
@project.milestones.build
end
def new
@project = Project.new
end
def create
@project = Project.new(project_params)
respond_to do |format|
if @project.save
format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.json { render :show, status: :created, location: @project }
else
format.html { render :new }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
这是我的观点:
<%= nested_form_for @project do |f| %>
<%= f.fields_for :milestones do |milestone_fields| %>
Milestone: <%= milestone_fields.text_field :item %>
<% end %>
<%= f.submit %>
<% end %>
我正在使用Rails 4.不确定是否重要
答案 0 :(得分:2)
首先,您需要遍历里程碑并打印每个里程碑
<% @project.milestones.each do |m| %>
<p><%= m.item %></p>
<% end %>
然后,您需要添加文本字段以插入新的里程碑:
<%= f.fields_for :milestones, @project.milestones.build do |milestone_fields|
<%= milestone_fields.text_field :item %>
<% end %>
同时删除控制器中show方法中的代码。
与您的代码唯一不同的是,我告诉fields_for
在这种情况下应该使用哪个数组@project.milestones.build
应该返回一个唯一元素而不是所有集合
答案 1 :(得分:0)
迭代列表然后在视图中构建新对象,这应该有效。
<%= form_for @project do |f| %>
<% @project.milestones.each do |m| %>
<p><%= m.item %></p>
<% end %>
<%= f.fields_for @project.milestones.build do |ff| %>
Milestone: <%= ff.text_field :item %>
<% end %>
<%= f.submit %>
<% end %>
答案 2 :(得分:0)
是的,将构建对象传递给嵌套表单 类似于上面的
<%= f.fields_for :milestones, @project.milestones.build do |milestone_fields|
<%= milestone_fields.text_field :item %>
使用嵌套表单
将多种风格的产品添加到购物车时,这可能很有用