【问题标题】:edit model using selectbox nested_form gem使用选择框nested_form gem 编辑模型
【发布时间】:2013-10-08 07:51:30
【问题描述】:

我有一个嵌套表单 gem 问题,好几天都想不通。

当“编辑”模型时,为什么我的选择框没有填充数据库中的当前值?

我的“自定义”视图:

<%= nested_form_for @order_detail, :url => create_customize_cart_path do |f| %>
    # some field here
    <%= f.fields_for :order_customs do |builder| %>
      <%= render "order_customs_form", :f => builder %>
    <% end %>
    <%= f.link_to_add "Add Order Customize", :order_customs %>
    <%= f.submit %>  
<%end%>

我的局部视图(嵌套):

<%= f.label :pressed_position, "Position" %>
<%= f.select :pressed_position, options_for_select(PRESSED_POSITION), {:include_blank => '-- Select Position --'} %>
<%= f.link_to_remove "Remove Customize" %>

按压位置为常数 和数据存储“字符串”值

PRESSED_POSITION = [
  ["Top", "top"],
  ["Center","center"],
  ["Bottom","bottom"],
  ["Right", "right"],
  ["Left", "left"],
  ["Top Left", "top left"],
  ["Top Center", "top center"],
  ["Top Right", "top right"],
  ["Center Left", "center left"],
  ["Center Center", "center center"],
  ["Center Right", "center right"],
  ["Bottom Left", "bottom left"],
  ["Bottom Center", "bottom center"],
  ["Bottom Right", "bottom right"]
] 

对于文本字段,它可以工作(填充当前数据),但如果我使用选择框,它不会

在我的控制器中:

def customize
  @order_detail = OrderDetail.find_by_id(decrypting_id(params[:id])) rescue nil
  if @order_detail.present?
    if (current_user == @order_detail.order.user || temporary_user == @order_detail.order.temp_user_id) && @order_detail.order.order_status_id == 1 
      1.times{@order_detail.order_customs}
    else
      # else going here
    end
  else
    # else going here
  end    
end

你们能告诉我我应该怎么做才能解决这个问题吗? 非常感谢,谢谢

【问题讨论】:

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


    【解决方案1】:

    我现在无法测试它,但我会这样做:

    您的观点 已编辑

    <%= nested_form_for @order_detail, :url => create_customize_cart_path do |f| %>
        # some field here
      <% @order_detail.order_customs.each do |order_custom| %>
        <%= f.fields_for :order_customs, order_custom do |builder| %>
          <%= render "order_customs_form", :f => builder, :order_custom => order_custom %>
        <% end %> 
      <% end %>
      <%= f.link_to_add "Add Order Customize", :order_customs %>
      <%= f.submit %>  
    <%end%>
    

    我们必须将order_custom 对象传递给部分

    部分

    <%= f.label :pressed_position, "Position" %>
    <%= f.select :pressed_position, options_for_select(PRESSED_POSITION, PRESSED_POSITION.index{|element| element.last==order_custom.pressed_position), {:include_blank => '-- Select Position --'} %>
    <%= f.link_to_remove "Remove Customize" %>
    

    这一行

    PRESSED_POSITION.index{|element| element.last==order_custom.pressed_position)
    

    将返回PRESSED_POSITION数组的索引,其中最后一个元素等于对象order_custompressed_position属性。

    希望对你有帮助:)

    【讨论】:

    • 抱歉迟到了。我已经尝试过你的代码,但抛出undefined local variable or method 'order_custom' for #&lt;#&lt;Class:0xb55a09c8&gt;:0xb411533c&gt;。您的代码试图将 order_custom 传递给局部视图然后获取它的索引,对吗?但我无法生成嵌套表单的当前索引。这样做很热吗?真的非常感谢您为此付出了努力
    • 如果我没记错的话,我有一个项目也有同样的需求,我会看看然后再回复你。
    • 嘿,你给了我一个正确的方法:D。与http://stackoverflow.com/questions/15777038/getting-undefined-method-values-at-for-nilnilclass-using-nested-form-for 相关,如果order_customs 为nil,我添加一个条件,并在部分视图上稍作修改,因为PRESSED_POSITION 只是一个字符串值,所以变成PRESSED_POSITION[PRESSED_POSITION.index{|element| element.last==order_custom.pressed_position)}]。但是有一个错误,如果我们“添加订单自定义”,最后一个嵌套表单上的按下位置的选择框填充了@order_detail.order_customs.last。如果我已经修复它,我也会编辑答案:D
    猜你喜欢
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多