如何在轨道上的ruby中做一个非模型表格?

我试图在轨道上创建一个非模型forms的ruby,我发现的大多数例子只有一个字段(比如一个搜索字段)或者使用旧的方式编写这样一个表单,一个带有Ruby的电子邮件表单轨道

如果有人能够向我展示一个非模型表单的示例代码,其中有两个字段用于视图以及我如何访问控制器中的那些字段,我将不胜感激。

非常感谢。

您将需要FormHelper方法:

假设您想要一个提交do_test操作的简单test操作:

测试操作的简单视图(posts / test.html.erb):

 <% form_tag '/posts/do_test' do %> <%=label_tag 'name' %> <%=text_field_tag 'name'%> <%=label_tag 'phone' %> <%=text_field_tag 'phone'%> 
<%= submit_tag 'Save' %>
<% end -%>

在post控制器:

 def test end def do_test name = params[:name] phone = params[:phone] # do whatever you want... end 

您还需要将这两个操作添加到config / routes.rb中的路由

 map.resources :posts, :collection=>{:test => :get, :do_test => :post} 

如果您创建一个表示对象的类(我们称之为ContactInfo ),您可以在该类上定义方法,然后使用标准的Rails表单构建器帮助程序来使用它们。

 class ContactInfo attr_accessor :name, :company, :email, :phone, :comments def initialize(hsh = {}) hsh.each do |key, value| self.send(:"#{key}=", value) end end end 

在你的forms:

 

Contact Us

<% form_for(@contact_info, :url => path_for_your_controller_that_handles_this, :html => {:method => :post}) do |f| %> <%= f.label :name %> <%= f.text_field :name %> ... <% end %>

到目前为止,谁在乎呢?

但是,添加有效的gem ,你有一个真正的理由这样做! 现在,您可以像真实模型一样获得validation消息。

看看我完成的ContactInfo类:

 class ContactInfo include Validatable attr_accessor :name, :company, :email, :phone, :comments validates_presence_of :name validates_presence_of :email validates_presence_of :phone def initialize(hsh = {}) hsh.each do |key, value| self.send(:"#{key}=", value) end end end 

我喜欢这个,因为你可以像调用ActiveRecord对象一样编写控制器,而不需要在需要重新显示表单时使用大量逻辑来编写控制器。

另外,如果您使用的是Formtastic或其他自定义表单构建器,则可以使用此对象,轻松保留现有的表单样式。

从Rails 4开始,您可以使用ActiveModel :: Model

http://blog.isnorcreative.com/2014/05/08/easier-non-activerecord-models-in-rails-4.html

 class Contact include ActiveModel::Model attr_accessor :email, :message validates :email, presence: true, length: {in:2..255} end 

您可以使用ActionView :: Helpers :: FormTagHelper进行非模型使用。 喜欢

 form_tag text_field_tag hidden_field_tag 

Api有很多很好的例子。 http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html

你有没有考虑过使用演示者?

http://blog.jayfields.com/2007/03/rails-presenter-pattern.html