2011-03-16 73 views
1

(注:我已閱讀http://shiningthrough.co.uk/Select-helper-methods-in-Ruby-on-Rails,但仍然不知道選擇什麼樣的)使用collection_select或選擇或select_tag

我將要(該方法獲得)作爲搜索過濾器的形式。

<%= form_tag(reports_courses_allocated_path, :method =>'get') %> 
<%= collection_select(:course, :id, @courses, :id, :title, :include_blank => "All Courses") %> 
</form> 

上面產生欲用於標籤的輸出,但沒有「選擇」參數,我可以通過在一個PARAMS值。我也不喜歡這樣的事實,這個名字當然是[ID],我寧願它命名COURSE_ID

我可以這樣做:

<%= select_tag(:course_id, raw("<option>All Courses</option>") + options_from_collection_for_select(@courses, :id, :title, params[:course_id])) %> 

但我不喜歡我的事實連接選項,但這可能是我最好的選擇。

有沒有意見/建議?

回答

2

它必須是一個參數值,在你的情況下設置'選擇'? collection_select的「selected」值基於@ course.id的值 - 您可以確保@course代表應該選擇的值。

至於名稱,即使在編寫自己的HTML時,我也會堅持使用Rails默認值。這決定了參數如何進入你的行動。如果你的元素有名字當然[ID],當然[名],當然[類型],等等,PARAMS將

{ :course => { :id => xx, :name => xx, :type => xx } } 

這是方便,因爲你可以調用

Course.new(params[:course]) 

而且,你不需要用你自己的HTML表單標籤關閉你的表單。方法form_tag需要一個塊:

<%= form_tag('/posts') do -%> 
    <div><%= submit_tag 'Save' %></div> 
<% end -%> 

最後...我用select_tag並建立了一個選項列表之前。它可能會變得醜陋,但你可以在視圖幫助器中的方法中構建它,它不會混淆你的rhtml以及它可以被單元測試的地方。