首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单选按钮列表的rails自定义表单生成器示例

单选按钮列表的rails自定义表单生成器示例
EN

Stack Overflow用户
提问于 2009-10-19 02:26:43
回答 1查看 2.3K关注 0票数 0

我正在寻找一个例子,如何创建一个自定义表单生成器的单选按钮列表绑定到一个对象,acts_as_tree。我已经有了显示单选按钮列表的代码,但是我想通过重构到一个表单生成器来使它干掉。我找不到任何用于单选按钮列表的自定义表单生成器的示例。

任何指针/链接都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-19 05:06:46

假设您经常从许多不同的视图对此模型调用form_for,并且每个表单都将具有相同的单选按钮集。这里有几条你可以走的路线。然而,我不知道你是在问如何自动添加单选按钮列表,还是只是压缩它。

自动添加单选按钮列表所需的ActionView内部知识比我所能分享的要多一点。本质上,您需要弄清楚事物是如何呈现的,并覆盖ActionView::Helpers::FormHelper中的fields_for方法才能正常工作。不幸的是,FormBuilders不是这样工作的。所以这会带来很多麻烦,而不是它的价值。

更好的方法是创建一个在自定义表单生成器中生成所有单选按钮的方法。为了在发生变化时保持简单,我们将在模型中添加一个常量。我随意地决定它将是一个散列,其中每个键都是一个属性方法,您希望在表单中使用单选按钮列表来表示,并且每个值都是该属性的可接受值的列表。这使得无需更改表单构建器即可轻松生成多个单选按钮列表。附注:您还可以使用散列来验证与单选按钮关联的任何属性的内容。

/app/models/example.rb

代码语言:javascript
复制
class Example < ActiveRecord::Base
  ...
  RADIO_BUTTON_HASH = {
    :attribute_a => [:accepted_value_a1, :accepted_value_a2, :accepted_value_a3],
    :attribute_b => [:accepted_value_b1, :accepted_value_b2],
    ...
  }


   def self.radio_buttons_sort(a,b)
     # sort method to ensure that multiple radio buttons lists appear in the order you want
   end

   def self.radio_buttons_sorted
     RADIO_BUTTON_HASH.sort{|a,b| radio_button_sort(a,b)}
   end
   ...
end

除了散列之外,我还添加了几个方便的方法,它们不是必需的,但它们提供了一种更干净的标准化输出的方法。

**/app/helpers/example_helper.rb模块ExampleHelper

代码语言:javascript
复制
  # the custom FormBuilder
  class ExampleFormBuilder < ActionView::Helpers::FormBuilder    

    # add onkeypress and set maxlength of field to 3 to all text fields
    def radio_button_list(options={})
      Example.sorted_radio_buttons.each do |method,values|
        values.each do |value|
          radio_button(method, value, options)
        end
      end
    end

  end
end

然后从包含ExampleHelper的视图(默认情况下,在示例控制器呈现的任何视图中执行)。

代码语言:javascript
复制
<%form_for @example, :builder => ExampleFormBuilder do |f| %>
  ...

  <%=f.radio_button_list %>
<%end%>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1585648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档