我正在使用Ruby on Rails 3.0.9,我正在尝试自己实现“联系我们”表单。所以......
...在我的模型文件中我有:
require 'active_model'
class ContactUs
include ActiveModel::Conversion
include ActiveModel::Validations
attr_accessor :email, :subject, :message
def initialize(attributes = {})
@attributes = attributes
end
validates :email,
:presence => true
validates :subject,
:presence => true
validates :message,
:presence => true
def persist
@persisted = true
end
def persisted?
false
end
end
...在我的视图文件中我有:
<%= form_for @contact_us, :url => contact_us_path do |f| %>
<%= f.text_field :email %>
<%= f.text_field :subject %>
<%= f.text_area :message %>
<% end %>
...在我的路由器文件中我有:
match 'contact_us' => 'pages#contact_us', :via => [:get, :post]
...在我的控制器文件中我有:
class PagesController < ApplicationController
def contact_us
case request.request_method
when 'GET'
@contact_us = ContactUs.new
when 'POST'
@contact_us = ContactUs.new(params[:contact_us])
end
end
end
使用上面的代码,当我提交一个至少包含空白字段的表单(我这样做是为了使它不通过验证)并重新加载表单时,我不会自动填充这些字段。也就是说,在重新加载表单后(按下提交按钮后会发生这种情况),字段值全部设置为空值。
有什么问题?我使用ActiveModel
答案 0 :(得分:0)
尝试替换
<%= form_for @contact_us, :url => contact_us_path do |f| %>
<%= f.text_field :email %>
<%= f.text_field :subject %>
<%= f.text_area :message %>
<% end %>
带
<%= form_for @contact_us, :url => contact_us_path do |f| %>
<%= f.text_field :email, :value => @contact_us.email %>
<%= f.text_field :subject, :value => @contact_us.subject %>
<%= f.text_area :message, :value => @contact_us.message %>
<% end %>
编辑:
我相信你必须自己添加质量分配功能,如下:
def initialize(attributes = {})
attributes.keys.each do |attr|
self.class.send(:attr_accessor, attr.to_sym)
instance_variable_set "@" + attr.to_s, attributes[attr.to_sym]
end
end
您实际上可以跳过这一行:self.class.send(:attr_accessor, attr.to_sym)
如果您希望attr_accessor :email, :subject, :message
像您一样