2011-10-16 46 views
1

我想創建一個簡單的靜態值下拉列表,我可以在表單中的Ruby on Rails應用程序中的任何位置重複使用該列表。下拉列表是非常簡單的,像這樣:使用Rails創建可重複使用的下拉列表

<select> 
    <option value="5">5 minutes</option> 
    <option value="15">15 minutes</option> 
    <option value="30">30 minutes</option> 
    <option value="60">1 hour</option> 
</select> 

什麼是Rails的最便捷的方式來創建一個「控制」(我不知道這個詞用Rails甚至用)這樣的並能夠在表單中的任何位置使用它並將其綁定到模型類的屬性?

更新:感謝您的答案,這些似乎是非常好的解決方案。

然而,這將有可能擴展類的的form_for收益(不知道哪一個,是表單助手或FormBuilder?),爲了能夠做到這一點的看法:

<%= form_for(@myObj) do |f| %> 
    <%= f.select_duration :duration %> 
<% end %> 

我開始搜索如何擴展表單助手,但還沒弄明白。

UPDATE2:我無法回答我自己的問題,所以我把它放在這裏。

終於想出瞭如何去做。在創建應用程序/傭工form_helper.rb文件,並用下面的代碼擴展FormBuilder:

module FormHelper 
    def self.included(base) 
     ActionView::Helpers::FormBuilder.instance_eval do 
      include FormBuilderMethods 
     end 
    end 

    DURATIONS = [["5 Minutes", 5], ["15 minutes", 15], ["30 minutes", 30],["1 hour", 60]] 
    module FormBuilderMethods 
     def select_duration(method) 
      @template.select @object_name, method, @template.options_for_select(DURATIONS, @object.reminderTimeMinutes ? DURATIONS[@object.reminderTimeMinutes] : DURATIONS[0]) 
     end 
    end 
end 

我不知道的是無論是持續時間常數的正確的地方(我很新的最後一件事紅寶石和紅寶石)。

+0

正如我在回答中所解釋的,DURATIONS的定義以app/initializers中的.rb(帶有您選擇的名稱)進行。順便說一句,採取我的答案大部分是有點厚顏無恥,但不要把我的標記作爲答案。 – Snips

+0

糾正我,如果我誤解了你的要求。但是你所採取的方法有點複雜,如果你能以非常簡單的方式做同樣的事情,就像我在下面的答案中所提到的那樣。記住原則KISS – Ross

回答

2

創建應用程序/初始化一個名爲.rb文件作爲一個數組創建你的選擇

DURATIONS = [["5 Minutes", 5], ["15 minutes", 15], ["30 minutes", 30],["1 hour", 60]] 

然後,在你想利用這些選項的_forms,

<div class="field"> 
    <b>Choose a duration</b><br /> 
    <%= f.select :duration, options_for_select(DURATIONS, @my_table.duration ? DURATIONS[@my_table.duration] : DURATIONS[0]) %> 
</div> 

祝你好運。

+1

謝謝,編輯與答覆的問題。 –

2

只需經過select_tag,或collection_select

select_tag 'meeting', 'time', ['5 min', '15 min', '30min']` 

如果你想重用標籤添加它作爲應用助手文件'

def my_dropdown 
    select_tag(same as above 
end 

在您查看文件只需撥打一個輔助功能<%= my_dropdown%>

+0

是的,我同意,我們有一個總是把視圖助手作爲幫助模塊的標準,而不是說模型方法 - 我們試圖預留商業邏輯,我們也想把它們排除在控制器之外。 –

相關問題