`
hideto
  • 浏览: 2678389 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

每天一剂Rails良药之Creating a Custom Form Builder

    博客分类:
  • Ruby
阅读更多
有时候我们希望我们的表单拥有一致的显示风格,今天我们就看看用Rails怎样创建一个Helper来自定义表单。

1,实现自己的FormBuilder
在app/helpers/application_helper.rb里加入以下代码:
class TabularFormBuilder < ActionView::Helpers::FormBuilder
    (field_helpers - %w(check_box radio_button)).each do |selector|
      src = <<-END_SRC
        def #{selector}(field, options = {})
          @template.content_tag("tr",
            @template.content_tag("td", field.to_s.humanize + ":") +
              @template.content_tag("td", super))
        end
      END_SRC
      class_eval src, __FILE__, __LINE__
    end
end

def tabular_form_for(name, object = nil, options = nil, &proc)
    concat("<table>", proc.binding)
    form_for(name,
             object,
             (options||{}).merge(:builder => TabularFormBuilder),
             &proc)
    concat("</table>", proc.binding)
end

这里我们创建了tabular_form_for这个helper方法供页面使用,这里:builder => TabularFormBuilder用来生成一个table格式的表单。

2,在页面中使用自定义表单helper方法
<% tabular_form_for :contact do |f| %>
    <%= f.text_field :name %>
    <%= f.text_field :email %>
    <%= f.text_field :phone %>
<% end %>

就这么简单!
让我们来给form table隔行加上背景色:
class TabularAlternatingColorFormBuilder < ActionView::Helpers::FormBuilder
  (field_helpers - %w(check_box radio_button)).each do |selector|
    src = <<-END_SRC
      def #{selector}(field, options = {})
        @template.content_tag("tr",
          @template.content_tag("td", field.to_s.humanize + ":") +
          @template.content_tag("td", super),
            :class => (@alt = (@alt ? false : true)) ? "alt-row" : ""  )
      end
    END_SRC
    class_eval src, __FILE__, __LINE__
  end
end

def tabular_form_with_alternating_colors_for(name, object = nil, options = nil, &proc)
    concat("<table>", proc.binding)
    form_for(name,
             object,
             (options||{}).merge(:builder => TabularAlternatingColorFormBuilder),
             &proc)
    concat("</table>", proc.binding)
end

修改default.css:
.alt-row {
  background: #fab444;
}

页面调用:
<%= stylesheet_link_tag "default" %>

<% tabular_form_with_alternating_colors_for :contact do |f| %>
    <%= f.text_field :name %>
    <%= f.text_field :email %>
    <%= f.text_field :phone %>
<% end %>
分享到:
评论
3 楼 hideto 2007-05-29  
动态脚本语言就是这样,非常灵活,表达能力非常强,但不像Java代码那样看着舒服和熟悉,不过习惯后就觉得很爽了

这个每天一剂Rails系列就是一个专栏,但是由于每篇都是分别讲述前人总结出来的一个小技巧或者小方法,所以各篇之间内容不会太连贯,各篇之间也没有太多联系,适合于看完《Agile Web Development with Rails》一书后再看。一般按发表时间顺序看即可。
2 楼 fk! 2007-05-29  
楼主能不能把你这个“rails每天一剂”做成一个专题按时间列表,我们也好学习阿!
谢谢了!
1 楼 fk! 2007-05-29  
rails这段代码怎么看着让人难受啊,乱闹心?!

相关推荐

    formbuilder:[需要维护者] Formbuilder是一个小的图形界面,可让用户构建自己的Web表单

    Formbuilder是一个图形界面,可让用户构建自己的Web表单。 考虑使用Wufoo或Google Forms,但可以将其集成到您的应用程序中的轻量级组件。 Formbuilder.js仅处理创建表单的客户端逻辑。 它将输出表单的结构化JSON...

    jQueryformBuilder一个jQuery插件能够通过拖放的方式创建表单

    jQuery formBuilder是一个强大的前端开发工具,专为简化表单构建过程而设计。它允许开发者和非技术用户通过直观的拖放界面创建自定义的表单,无需深入HTML、CSS或JavaScript代码。这个插件极大地提高了表单设计的...

    Rails Recipes (2006) .pdf

    Creating a Custom Form Builder**:详细解释了如何构建自定义表单生成器,以便更灵活地管理表单元素。 - **13. Make Pretty Graphs**:介绍了一系列技巧,帮助开发者使用 Rails 创建美观的图表。 #### 小结 ...

    foundation_form_builder:用于 ZURB Foundation 的 Rails FormBuilder

    如果你想用一个简单的FormBuilder界面和所有 Foundation 的优点来构建漂亮的表单,这个 gem 是给你的! FoundationFormBuilder 正在进行中。 我欢迎错误报告和拉取请求! 到目前为止,它仅在 Rails 4.2 和 Ruby ...

    Ajax-Rails-4-AJAX-Form.zip

    Ajax-Rails-4-AJAX-Form.zip,rails 4 ajax表单示例,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载网页的情况下...

    Ruby-SimpleForm轻松处理Rails表单

    在Ruby on Rails框架中,构建表单是一项常见的任务,而Simple Form gem就是为了简化这一过程而设计的。Simple Form是一款强大的表单构建器,它提供了一种简洁、直观的方式来创建复杂的表单,使得开发者能更专注于...

    Rails.Angular.Postgres.and.Bootstrap.2nd.Edition

    Create a usable and attractive login form using Bootstrap's styles, while ensuring the database table backing it is secure using Postgres' check constraints. See how creating an advanced Postgres ...

    Rails 101 入门电子书

    《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别是那些想要从零开始掌握这项技术的新手。 #### 二、...

    Agile Web Development with Rails 4

    You concentrate on creating the application, and Rails takes care of the details., Tens of thousands of developers have used this award-winning book to learn Rails. It’s a broad, far-reaching ...

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...

    rails 5 test prescriptions build a healthy codebase

    Your Ruby on Rails application is sick. Deadlines are looming, but every time you make the slightest change to the code, something else breaks. Nobody remembers what that tricky piece of code was ...

    Rails之道.pdf(最新版)

    《Rails之道》详细讨论了Rails的程序代码并通过分析Rails中的代码片段来深入解释它的功能,同时,《Rails之道》部分章节也摘录了一些API文档中的内容,使读者能够快速地找到对应的API文档、相关的示例代码以及深入的...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    ember-form-builder:简单易扩展的Ember应用程序表单生成器

    Ember Form Builder是一个Ember插件,可让您组装带有标签,验证和提示的表单,而无需重复自己的工作。 它受到Rails宝石的强烈启发。 Ember Form Builder 2.X需要Ember 3.16.0+ Ember Form Builder 1.X需要Ember ...

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    rails2-sample

    从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...

    Rails之道.pdf 高清 带书签

    Rails之道.pdf 高清 带书签

Global site tag (gtag.js) - Google Analytics