gpt4 book ai didi

ruby-on-rails - 来自 Controller 的 Rails 验证

转载 作者:行者123 更新时间:2023-12-01 21:58:16 24 4
gpt4 key购买 nike

有一个联系页面,可以输入姓名、电话、电子邮件和消息,然后发送到管理员的电子邮件。没有理由将消息存储在数据库中。

问题。如何:

  1. 在 Controller 中使用 Rails 验证,根本不使用模型,或者

  2. 在模型中使用验证,但没有任何数据库关系

更新:

型号:

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

Controller :

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 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

通过此,您将能够初始化新对象并能够调用该对象的验证。

我认为您的 Controller 代码中有一个具有相同名称的不同类名,我可以看到:

if ContactPageMessage.received(params).deliver
redirect_to contacts_path, :notice => "Success"
else

如果这是您的邮件程序类,请将其名称更改为 ContactPageMes​​sageMailer。您将不会收到该错误。

希望能有所帮助。谢谢

关于ruby-on-rails - 来自 Controller 的 Rails 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17965617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com