2014-03-06 25 views
0

款式選擇助手我在Rails的3用Rails 3

在問候的collection_select助手一個簡單的問題,我想創建一個下拉領域,由此用戶可以從列表中選擇一個國家。

我的代碼目前看起來是這樣的:

<%= collection_select(:country,:id,SyncedCountry.order('name ASC'),:name,:name,{},{:class => "input-xlarge"}) %> 

當我我看到這樣的事情在PARAMS爲國家在頁面上提交:

"country"=>{"id"=>"Antilles"} 

我真正想要的是id在下拉列表中選擇的國家/地區,而不是哈希格式。所以結果會更喜歡:

「國家」=> 1(一個國家的選擇的ID)

任何想法?

回答

0

documentation

collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {}) public ...

:value_method:text_method參數的方法被稱爲 集合的每個成員上。返回值分別用作值 屬性和每個<option>標籤的內容。他們也可以是響應呼叫的任何對象,例如proc,將調用 來調用集合的每個成員來檢索值/文本。

所以嘗試:

<%= collection_select(:country,:id,SyncedCountry.order('name ASC'),:id,:name,{},{:class => "input-xlarge"}) %> 

文檔中的例子是這樣的:

使用示例(選擇爲Post實例的相關Author@post):

collection_select(:post, :author_id, Author.all, :id, 
    :name_with_initial, prompt: true) 

如果@post.author_id已經1,這將返回:

<select name="post[author_id]"> 
    <option value="">Please select</option> 
    <option value="1" selected="selected">D. Heinemeier Hansson</option> 
    <option value="2">D. Thomas</option> 
    <option value="3">M. Clark</option> 
</select> 

(這將返回 「AUTHOR_ID」=> 「1」)

現在,我不熟悉你的模型,但如果你選擇你的用戶的國家,比我想這應該工作:

<%= collection_select(:user, :country_id,SyncedCountry.order('name ASC'),:id,:name,{},{:class => "input-xlarge"}) %> 
+0

這幾乎可以工作,但參數看起來像這樣:'country「=> {」id「=>」1「}'有沒有把param作爲散列傳遞的,所以我只是得到ID ,即「國家」=> 1。 –

1

更換

<%= collection_select(:country,:id,SyncedCountry.order('name ASC'),:name,:name,{},{:class => "input-xlarge"}) %> 

<%= collection_select(:model_object,:country,SyncedCountry.order('name ASC'),:name,:name,{},{:class => "input-xlarge"}) %> 

其中model_object是通過以形成物體。如果其格式爲user且您的表單看起來像form_for(@user),則用:user替換:model_object

所以,參數看起來像"user"=>{"country"=>"Antilles"},假設您正在爲用戶設置國家/地區。

+0

@GrahamJackson您的問題是否解決? –