我有一个simple_form,它实际上不适用于普通模型。如果我将对象设置为:thing
,它似乎可以工作。
但是,我希望它具有一些验证。在其他问题中,我发现这意味着我需要一个模型...但是,我不确定该模型中需要包含什么。所以,我做了模型,但是我不知道如何将它们连接起来。
class ClientEmail
include ActiveModel::Validations
validate :cannot_be_present
attr_accessor :to_domain
def cannot_be_present
newDomClients = Client.where("email like :foo", {:foo => "%#{to_domain}%"})
errors.add(:base, "There cannot be any emails already in the database with the target domain" ) if newDomClients.length > 0
end
end
而simple_form是:
= simple_form_for(@client_email, url: { action: "update" }, html: {class: "search_form", method: :put }) do |f|
.input-row
= f.input :newDomain, :label => "New domain name", :required => true
(等)
最初,它说@client_email为nil,所以我用以下方法对其进行了初始化(考虑到Rails,似乎不太必要):
- @client_email = ClientEmail.new
但是这告诉我ClientEmail没有to_key方法,因此我显然在某处缺少大量基础结构。
答案 0 :(得分:0)
如果使用包含属于模型的对象创建表单,则无法创建不属于该模型的字段。您需要创建这样的表单才能做到这一点:
= simple_form_for(:client_email, url......)
如果使用这样的符号创建表单,则可以在此表单中创建任何字段并将其发送到所需的控制器。 params哈希不会改变太多,您可以像这样调用您的特殊字段:
params[:client_email][:your_field_name]
由于此字段不属于模型,因此最好在控制器中对其进行验证。
希望有帮助。
答案 1 :(得分:0)
看来我需要:
include Virtus.model
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
我不确定Virtus是什么。没有它可能是有可能的,但这是我已经拥有的图书馆...