繁体   English   中英

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

[英]Create reusable drop down list with 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常量的正确位置(我对红宝石很新,而且在轨道上是红宝石)。

在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>

祝好运。

只需浏览select_tag或collection_select即可

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

如果要重用标记,请将其添加为应用程序帮助文件`中的辅助函数

def my_dropdown
   select_tag(same as above
end

在您查看文件中只需调用<%= my_dropdown%>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM