2010-04-20 63 views
1

我試圖創建一個使用collection_select方法<選擇>元素,但似乎爲了正確<選項>被選中,標識傳入collection_select需要成爲一個實例變量而不是局部變量(這是部分發生的)。Ruby on Rails的:如何使用局部變量在collection_select

所以,當我創建一個productcategories一個<選擇>,適當的類別不是默認選擇。

_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,除非我丟失了某些東西,產品必須是是這個部分的局部變量)。

那麼如何在調用局部變量時獲得collection_select來選擇適當的項目?

回答

2

您是否嘗試過通過在選項哈希:selected關鍵?如果您提供當前的product.id,它應該按照您的預期行事。

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

+0

我想加上這個,因爲它自己的答案,因爲最後一個似乎是有用的內部和外部本身,儘管不是你正在尋找的東西。 – 2010-04-21 17:25:27

+0

再次感謝達米安,這似乎已經做到了,儘管它應該是:selected => product.category.id。如果您更新了答案,我會將其標記爲已接受。值得注意的是:在這種情況下,下拉列表中仍然會出現:prompt選項(如果您在我的問題中使用第二個示例中的方法,那麼rails足夠聰明,可以讓它遠離選項),但我可以忍受:) – mmacaulay 2010-04-21 17:56:52

+0

完成並完成。快樂的編碼。 – 2010-04-21 18:09:04

1

你可以通過集合到泛音,並指定一個局部變量來他們通過爲:

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

相關文章:http://apidock.com/rails/ActionView/Partials

+0

謝謝......但這並不能真正解決問題。 – mmacaulay 2010-04-20 20:11:57

+0

你想要一種獲得實例變量'@ products'而不必明確聲明它的方法,對嗎?通過'render:partial ...:collection => @ collection'傳遞所需的集合應該可以做到這一點。無論如何,如果您希望在每個產品表格行中有一個下拉列表,您將需要整個集合。或者我誤解了這個問題? – 2010-04-20 20:42:00

+0

不,我希望能夠用_local_變量調用collection_select,而不是實例變量,並在生成的HTML中選擇正確的選項。對不起,我意識到這個問題有點令人困惑。也許我會試着重新說一遍。 – mmacaulay 2010-04-21 00:14:17