2011-04-08 141 views
7

希望得到一個簡單的答案;我正在使用gem best_in_place,它的效果很好。我試圖找出如何使用創建一個下拉菜單:Rails 3 - best_in_place編輯

:type => :select, :collection => [] 

我希望能夠做的就是通過在已經從我的用戶模型中輸入名稱的列表。

任何想法如何做到這一點?我可以將它與collection_select混合使用嗎?

回答

8

的:採集參數接受鍵/值對的數組:

[ [key, value], [key, value], [key, value], ... ] 

選項值選項文本

最好在與要爲其生成選項列表的對象相對應的模型中生成此數組,而不是在您的視圖中生成此數組。

聽起來像你有best_in_place和運行,所以這裏是一個簡單的項目顯示頁面的例子,你想使用best_in_place來改變一個特定項目的指定用戶與選擇框。

## CONTROLLER 

# GET /projects/1 
# GET /projects/1.xml 
# GET /projects/1.json 
def show 
    @project = Project.find(params[:id]) 

    respond_to do |format| 
    format.html 
    format.xml { render :xml => @project.to_xml } 
    format.json { render :json => @project.as_json } 
    end 
end 


## MODELS 

class User 
    has_many :projects 

    def self.list_user_options 
    User.select("id, name").map {|x| [x.id, x.name] } 
    end 
end 

class Project 
    belongs_to :user 
end 


## VIEW (e.g. show.html.erb) 
## excerpt 

<p> 
    <b>Assigned to:</b> 
    <%= best_in_place @project, :user_id, :type => :select, :collection => User::list_user_options %> 
</p> 

# note :user_id and not :user 

注意,從存儲器,的best_in_place主版本發送的值是否被改變,或者沒有爲選擇框Ajax請求。

還有一些要記住; best_in_place是用於「現場」編輯現有記錄,而不是創建新記錄(爲此,在您的_form部分中爲新頁面使用collection_select)。

+0

謝謝!得到這個工作...很容易錯過你的例子結尾處的代碼,這要歸功於OS X中的鉻滾動。 – 2012-04-04 20:08:33

+2

也許你應該選擇這個作爲你的答案,如果它對你有幫助。 – marcamillion 2012-11-30 16:59:14

+0

感謝這個答案,一個問題是......我們如何讓'select'中的'空白'選項被選中?即完全「空白」或「無」或類似的東西。 – marcamillion 2012-11-30 17:22:56

相關問題