Rails 嵌套表 edit 时候问题。

realwol · 发布于 2014年6月16日 · 最后由 billy 回复于 2014年6月17日 · 801 次阅读
4933

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循环,只显示选中的结果,页会多出来空白行,且不能正确填充值。这是第二个问题。 有经验的希望能指点 一二。

共收到 8 条回复
4933

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

4933

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

11222

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

4933

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

11222

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

4933

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

1342

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

11222

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

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