【问题标题】:Ruby on Rails 3: How to create a custom form element / form field input method?Ruby on Rails 3:如何创建自定义表单元素/表单字段输入法?
【发布时间】:2011-07-16 03:51:31
【问题描述】:

我想为 Ruby on Rails 3 创建一个自定义表单元素并将其打包为 gem。我来自 PHP(Zend 框架)背景,可以轻松创建自定义表单元素以在您的应用程序中使用。作为 Ruby on Rails 的新手,我不知道如何开始、将代码放在哪里以及要扩展哪些类。你能指出我正确的方向吗?这是我想要结束的代码:

<%= form_for(@model) do |f| %>
  <div class="field">
    <%= f.label :field_name %><br />
    <%= f.my_custom_element :field_name %>
  </div>
<% end %>

...这将生成一些像这样的 HTML:

<div class="field">
  <label for="model_field_name">Notes</label><br>
  <input type="text" name="model[field_name][field1]">
  <input type="text" name="model[field_name][field2]">
  <input type="text" name="model[field_name][field3]">
</div>

..那么当用户提交表单时,会有一些自定义验证,以及自定义逻辑将字段再次拼接成一个字段,然后Rails将数据保存到数据库中。

如何创建此自定义表单元素来执行此操作? (顺便说一下,我一直称它为“自定义表单元素”,因为这就是 Zend Framework 中的名称。如果 Rails 对此有不同的名称,请纠正我,以便我可以更轻松地查找有关此主题的信息.)

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rubygems


    【解决方案1】:

    如果您想要验证和 MVC,我建议您开始研究 Rails 引擎。

    http://edgeapi.rubyonrails.org/classes/Rails/Engine.html

    【讨论】:

    • 其实,这正是我正在做的。我什至安装了 Rails 3.1,所以我可以获得新的插件生成器(rails plugin new)。但是,我不知道下一步该做什么,因为我以前从未创建过自定义表单元素。
    【解决方案2】:

    Andrew,您可以从生成 HTML 代码的自己的助手开始。 当你觉得舒服时,继续看看默认助手的样子

         # File actionpack/lib/action_view/helpers/form_tag_helper.rb, line 292
    292:       def check_box_tag(name, value = "1", checked = false, options = {})
    293:         html_options = { "type" => "checkbox", "name" => name, "id" => sanitize_to_id(name), "value" => value }.update(options.stringify_keys)
    294:         html_options["checked"] = "checked" if checked
    295:         tag :input, html_options
    296:       end
    

    之后潜入source :)

    【讨论】:

    • 我从没想过在 github 上查看 Rails 源代码。好主意。您能否更详细地说明您所说的“从您自己的助手开始”时的意思?我以前没有写过这样的东西,所以我不知道从哪里开始。
    • 我决定克隆 Rails 存储库,以便可以在我的 IDE 中本地查看它。我早就应该这样做了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2012-11-11
    • 2013-05-01
    • 2011-02-05
    • 2012-07-22
    相关资源
    最近更新 更多