1

我是 ruby​​ 和 rails 的新手;我在我的 rails 3 应用程序中使用了以下 ruby​​ 类定义。此类仅用作在我的提交视图中填充的联系信息的属性容器(form_for)。我读了一篇文章,您可以在其中直接使用 ActiveModel 而不是 ActiveRecord 来执行验证,所以我正在尝试。当我检查对象是否有效时出现以下异常?在我的回发控制器中。我认为这有效吗?如果我包含 ActiveModel::Validations 将可用;也许我正在向后做一些其他的事情。任何帮助,将不胜感激:

未定义的方法“有效吗?” 为了 #

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

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

只是搞乱测试。

  validates_each :first_name, :last_name do |record, attr, value|
    record.errors.add attr, 'starts with z.' if value.to_s[0] == z
  end
...
end

在我的控制器/动作中......

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
4

1 回答 1

2

在您的控制器中,您正在设置@contact_model一个哈希,params[:contact_model]然后调用valid?它。您需要创建一个 ContactModel 实例并在其上调用 valid。像这样:

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

if (@contact_model.valid?)
...

我看到了调用 ContactModel.new() 的注释掉的代码,但无论如何你都不想这样做。此外,没有理由对参数内容进行 dup() 或 initialize_copy() 。

于 2013-04-11T02:05:22.603 回答