我正在尝试在Ruby on Rails中制作一个非模型表单,大多数我能找到的例子只有一个字段(比如搜索字段),或者使用一种旧的方式编写表单,例如用Ruby on Rails创建电子邮件表单.
如果有人可以向我展示一个非模型表单的示例代码,例如两个字段的视图和我在控制器中如何访问这些字段,我将不胜感激.
非常感谢。
我正在尝试在Ruby on Rails中制作一个非模型表单,大多数我能找到的例子只有一个字段(比如搜索字段),或者使用一种旧的方式编写表单,例如用Ruby on Rails创建电子邮件表单.
如果有人可以向我展示一个非模型表单的示例代码,例如两个字段的视图和我在控制器中如何访问这些字段,我将不胜感激.
非常感谢。
test
动作,它提交到do_test
动作:<% form_tag '/posts/do_test' do %>
<%=label_tag 'name' %>
<%=text_field_tag 'name'%>
<%=label_tag 'phone' %>
<%=text_field_tag 'phone'%>
<div><%= submit_tag 'Save' %></div>
<% end -%>
在 posts 控制器中:
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}
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
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
在你的表单中:
<h2>Contact Us</h2>
<% 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 %>
到目前为止,谁在意呢?
然而,加入validatable gem,你就有了一个真正的理由去做这个!现在你可以像真正的模型一样拥有验证消息。
看看我完成的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
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