Ruby on Rails 3:如何创建自定义表单元素/表单字段输入方法?

时间:2011-07-16 03:51:32

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

我想为Ruby on Rails 3创建一个自定义表单元素并将其打包为gem。我来自PHP(Zend Framework)背景,可以很容易地创建在应用程序中使用的自定义表单元素。作为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有不同的名称,请纠正我,这样我就可以更容易地找到关于这个主题的信息。)

2 个答案:

答案 0 :(得分:0)

如果你想要验证和MVC我建议开始研究Rails Engines。

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

答案 1 :(得分:0)

安德鲁,你可以从你自己的助手开始,结果将生成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:)