我想创建一个带有静态值的简单下拉列表,我可以在表单中的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常量的正确位置(我对红宝石很新,而且在轨道上是红宝石)。
答案 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;