有一个联系页面,可以输入姓名、电话、电子邮件和消息,然后发送到管理员的电子邮件。没有理由将消息存储在数据库中。
问题。如何:
在控制器中使用 Rails 验证,根本不使用模型,或者
在模型中使用验证,但没有任何数据库关系
UPD:
Model:
class ContactPageMessage
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :telephone, :email, :message
validates :name, :telephone, :email, :message, presence: true
validates :email, email_format: { :message => "Неверный формат E-mail адреса"}
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
控制器:
def sendmessage
cpm = ContactPageMessage.new()
if cpm.valid?
@settings = Setting.first
if !@settings
redirect_to contacts_path, :alert => "Fail"
end
if ContactPageMessage.received(params).deliver
redirect_to contacts_path, :notice => "Success"
else
redirect_to contacts_path, :alert => "Fail"
end
else
redirect_to contacts_path, :alert => "Fail"
end
end
end
你应该使用模型而不继承ActiveRecord::Base
class.
class ContactPageMessage
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :whatever
validates :whatever, :presence => true
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
通过这个,您将能够初始化新对象并能够调用该对象的验证。
我认为您的控制器代码中有一个具有相同名称的不同类名,我可以看到:
if ContactPageMessage.received(params).deliver
redirect_to contacts_path, :notice => "Success"
else
如果这是您的邮件程序类,请将其名称更改为ContactPageMessageMailer
。您将不再收到该错误。
希望它会有所帮助。谢谢
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)