使用Rails创建可重用的下拉列表

时间:2011-10-16 12:05:51

标签: ruby-on-rails

我想创建一个带有静态值的简单下拉列表,我可以在表单中的Ruby on 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返回的类(不确定是哪一个,是FormHelper还是FormBuilder?),以便能够在视图中执行此操作:

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

我开始谷歌搜索如何扩展表单助手,但还没弄明白。

更新2:我无法回答我自己的问题,所以我把它放在这里。

最后想出了如何做到这一点。在app / helpers中创建了一个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

我不确定的最后一件事是它是否是DURATIONS常量的正确位置(我对红宝石很新,而且在轨道上是红宝石)。

2 个答案:

答案 0 :(得分:2)

在app / initializers中创建一个.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
在您查看文件中

只需调用&lt;%= my_dropdown%&gt;