rails:保存后显示多个输入字段的嵌套表单

时间:2014-07-22 22:22:49

标签: ruby-on-rails ruby-on-rails-4 nested-forms nested-attributes

我只想显示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.不确定是否重要


showing input fields

3 个答案:

答案 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 %>

使用嵌套表单

将多种风格的产品添加到购物车时,这可能很有用