Rails 嵌套表 edit 时候问题。

realwol · 2014年06月16日 · 最后由 billy 回复于 2014年06月17日 · 2087 次阅读

talk is cheap. 新建时候的代码:

<tbody>
    <% @tickets.each do |t| %>
    <%= f.fields_for :channel_tickets do |cf| %>
    <tr id="first_tr">
            <td>
                <%= cf.check_box :ticket_id, {}, t.id %>
                <%= t.id%>
            </td>
            <td><%= t.name %></td>
            <td>
                渠道价<%= cf.text_field :channel_price %>
                最低售价:<%= cf.text_field :lowest_online_price %>
            </td>
            <td>
                <%= cf.select :pay_method, %w"现付 充值 授信".collect{|c| [c,c]}, include_blank: true  %>
            </td>
    </tr>
    <% end %>
    <% end %>
</tbody>

效果是: 我选择了三种票中的两个。 但是在 edit 的时候成了这样: 代码:

<tbody>
  <% @tickets.each do |t| %>
    <%= f.fields_for :channel_tickets do |cf| %>
      <tr id="first_tr">
          <td>
            <%= cf.check_box :ticket_id %>
            <%= t.id%>
          </td>
          <td><%= t.name %></td>
          <td>
            渠道价<%= cf.text_field :channel_price %>
            最低售价:<%= cf.text_field :lowest_online_price %>
          </td>
          <td>
            <%= cf.select :pay_method, %w"现付 充值 授信".collect{|c| [c,c]}, include_blank: true  %>
          </td>
      </tr>
    <% end %>
  <% end %>
</tbody>

原因是两个循环分别循环造成的。 我是想在编辑的时候不仅可以编辑选中的,新建的时候没选中也要显示。这是第一个问题。 退一步,我想去掉@tickets循环,只显示选中的结果,页会多出来空白行,且不能正确填充值。这是第二个问题。 有经验的希望能指点 一二。

补充一下,第一个图中填写的渠道价和最低售价在选中记录中分别是 1,2 和 3,4.

第二个问题解决了。主要还是第一个问题,没想到一个优雅的解决方法。

你新建的时候没有选中 2,但修改里面有 2,说明新建时其实是存错了。把 controller 也贴出来吧。另外那些价格不知道哪里来的?没见你存价格?

#3 楼 @billy 不是存错了。价格存储在 1 楼补充。第二张图上显示了存储的价格。

那没有选中的 2 是不是也没有问题?既然都没有问题了,那问题是什么? :)

#5 楼 @billy 第一张中我只想选择 1 和 3,但是在编辑的时候,我想看到我没有选择的 2.

是不是 edit 的时候也应该按照 new 的来先渲染视图,然后再给画面的项目上赋值?(可能用 xxx_tag 标签会好一些)

edit 和 new 难道不是同一份 partial?为什么会有区别?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号