代码之家  ›  专栏  ›  技术社区  ›  mmacaulay

RubyonRails:如何在集合中使用局部变量

  •  1
  • mmacaulay  · 技术社区  · 16 年前

    我正在尝试使用collection select方法创建一个select元素,但似乎为了选择正确的选项,传递到collection select的标识符需要是一个实例变量,而不是一个局部变量(这发生在部分变量中)。

    因此,当我为 categories A的 product ,默认情况下不选择正确的类别。

    _ product_row.erb(不工作):

    My product: <%= product.name %>
    <%= collection_select(:product, :category_id, @current_user.categories, :id, :name, options = {:prompt => "-- Select a category --"}) %>
    

    截图:

    alt text http://img534.imageshack.us/img534/8929/screenshot20100421at120.png

    我发现我可以通过在手前声明一个实例变量来让它工作,但这对我来说似乎是一个巨大的攻击。

    _ product_row.erb(作品):

    <% @product_select_tmp = product %>
    <%= collection_select(:product_select_tmp, :category_id, @current_user.categories, :id, :name, options = {:prompt => "-- Select a category --"}) %>
    

    截图:

    alt text http://img534.imageshack.us/img534/1958/screenshot20100421at120l.png

    因为这个部分正在迭代一个产品集合,所以我不能在控制器中声明@product(iow,除非我缺少某些东西,product 必须 是局部变量)。

    那么,当使用局部变量调用集合时,如何让它选择适当的项?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Damien Wilson    16 年前

    你有没有试过通过 :selected 输入选项哈希?如果你提供电流 product.id 它应该像你期望的那样。

    <%= collection_select(:product, :category_id, @current_user.categories, :id, :name, {:prompt => "-- Select a category --", :selected => product.category.id }) %>

        2
  •  1
  •   Damien Wilson    16 年前

    可以将集合传递给分部,并指定一个局部变量将其传递为:

    <%= render :partial => "products/product_row", :collection => @products, :as => :products %>
    

    相关文件: http://apidock.com/rails/ActionView/Partials