我正在尝试使用collection_select方法创建一个元素,但为了选择合适的标识符,传入collection_select的标识符需要是实例变量,而不是局部变量(这发生在部分变量中)。
因此,当我为一个categories创建一个product时,默认情况下不选择正确的类别。
_product_row.erb (不工作):
My product: <%= product.name %>
<%= collection_select(:product, :category_id, @current_user.categories, :id, :name, options = {:prompt => "-- Select a category --"}) %>截图:
alt文本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文本http://img534.imageshack.us/img534/1958/screenshot20100421at120l.png
因为这个部分是在对产品集合进行迭代,所以我不能只在控制器中声明@product (IOW,除非我遗漏了什么,产品必须是这个部分中的局部变量)。
那么,如何让collection_select在使用局部变量调用它时选择合适的项呢?
发布于 2010-04-21 17:24:39
您试过在选项哈希中传递:selected键吗?如果您提供了当前的product.id,那么它的行为应该是您所期望的。
<%= collection_select(:product, :category_id, @current_user.categories, :id, :name, {:prompt => "-- Select a category --", :selected => product.category.id}) %>
发布于 2010-04-20 17:43:09
您可以将集合传递给部分,并指定一个局部变量将它们传递为:
<%= render :partial => "products/product_row", :collection => @products, :as => :products %>相关文件:http://apidock.com/rails/ActionView/Partials
https://stackoverflow.com/questions/2676205
复制相似问题