我想为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有不同的名称,请纠正我,这样我就可以更容易地找到关于这个主题的信息。)
答案 0 :(得分:0)
如果你想要验证和MVC我建议开始研究Rails Engines。
答案 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:)