[英]Ruby on Rails: How to use a local variable in a collection_select
我正在嘗試使用collection_select方法創建一個<select>元素,但是似乎為了選擇正確的<option>,傳遞給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 --"}) %>
截圖:
替代文字http://img534.imageshack.us/img534/8929/screenshot20100421at120.png
我發現可以通過事先聲明一個實例變量來使其工作,但這對我來說似乎是一個巨大的麻煩。
_product_row.erb(WORKS):
<% @product_select_tmp = product %>
<%= collection_select(:product_select_tmp, :category_id, @current_user.categories, :id, :name, options = {:prompt => "-- Select a category --"}) %>
截圖:
替代文字http://img534.imageshack.us/img534/1958/screenshot20100421at120l.png
因為此部分正在迭代產品集合,所以不能在控制器中聲明@product(IOW,除非缺少某些內容,否則product 必須是此部分中的局部變量)。
那么,當使用局部變量調用它時,如何使collection_select選擇合適的項目呢?
您是否嘗試過在選項哈希中傳遞:selected
鍵? 如果您為它提供當前的product.id
它的行為應與您期望的一樣。
<%= collection_select(:product, :category_id, @current_user.categories, :id, :name, {:prompt => "-- Select a category --", :selected => product.category.id }) %>
您可以將集合傳遞給partials,並指定一個局部變量以將它們傳遞為:
<%= render :partial => "products/product_row", :collection => @products, :as => :products %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.