Ruby 验证不适用于扩展ActiveModel::Naming的类,包括ActiveModel::Validations

Ruby 验证不适用于扩展ActiveModel::Naming的类,包括ActiveModel::Validations,ruby,ruby-on-rails-3,rubygems,activemodel,Ruby,Ruby On Rails 3,Rubygems,Activemodel,我是ruby和rails的新手;我在rails 3应用程序中使用了下面的ruby类定义。这个类只是用作属性容器,用于在提交时在我的视图中填充联系人信息(表单_)。我读过一篇文章,在这里你可以直接使用ActiveModel来执行验证,所以我正在尝试。当我检查对象是否有效时,出现以下异常?在回发的控制器中。我认为这是正确的?如果我包括了ActiveModel::Validations,就可以使用它;也许我正在做一些其他的事情。如有任何帮助,将不胜感激: 未定义的方法'valid'# 下面是我的类定义

我是ruby和rails的新手;我在rails 3应用程序中使用了下面的ruby类定义。这个类只是用作属性容器,用于在提交时在我的视图中填充联系人信息(表单_)。我读过一篇文章,在这里你可以直接使用ActiveModel来执行验证,所以我正在尝试。当我检查对象是否有效时,出现以下异常?在回发的控制器中。我认为这是正确的?如果我包括了ActiveModel::Validations,就可以使用它;也许我正在做一些其他的事情。如有任何帮助,将不胜感激:

未定义的方法'valid'#

下面是我的类定义,下面是我在控制器操作中如何处理它:

require 'active_model'

class ContactModel
  extend ActiveModel::Naming
  include ActiveModel::AttributeMethods
  include ActiveModel::Validations
  include ActiveModel::Conversion

  validates_presence_of :first_name, :last_name, :email_address, :email_address_confirmed, :subject, :contact_message

  attr_accessor :first_name, :last_name, :email_address, :email_address_confirmed,
                :telephone_number, :subject, :contact_message
只是在做测试。 在我的控制器/操作中

def send_email
    #@contact_model = ContactModel.new().initialize_copy(params[:contact_model])
    @contact_model = params[:contact_model].dup

    respond_to do |format|
      if (@contact_model.valid?)
        # Tell the UserMailer to send a welcome Email after save
        ContactMailer.contact_email(@contact_model).deliver

        format.html { redirect_to(@contact_model, notice: 'Email successfully sent.') }
        format.json { render json: @contact_model, status: :created, location: @contact_model }
      else
        # What to do here?
      end

    end
  end

在控制器中,您将
@contact\u model
设置为散列,
参数[:contact\u model]
,然后对其调用
valid?
。您需要创建一个ContactModel实例并调用valid。像这样:

@contact_model = ContactModel.new(params[:contact_model])

if (@contact_model.valid?)
...

我看到注释掉了调用ContactModel.new()的代码,但无论如何,这不是您想要的方式。而且,没有理由对params的东西进行dup()或初始化_copy()。

我想你已经知道了。非常感谢。
@contact_model = ContactModel.new(params[:contact_model])

if (@contact_model.valid?)
...