首页 > 解决方案 > Rails.Share 2 个模型之间的变量(验证)

问题描述

所以遇到一些麻烦如何解决我的puzzle.

我有 2 个模型

1) 模式1.rb

class Model1 < ActiveRecord::Base
  set_table_name "Model1"
  set_sequence_name "Model1"  

    module Validate
      def validate_discount
        errors.add(:discount, "#blank") if discount.blank?
      end
    end
end

2)模型2.rb

class Model2 < ActiveRecord::Base
  include Model1::Validate

  validate :validate_discount

end

我需要的?问题是在提交页面操作model2时,所以我需要从那里执行验证以获得正确的错误显示,但discount只存在于model1我需要将它传递给model2

我现在得到的错误是:

undefined local variable or method `discount' for #<Model2:0x12c952f8>

我可能需要以某种方式通过控制器吗?我的意思是这样的:

Model2.new
Model2["discount"] = 20
Model2.discount

我现在被困住了。

标签: ruby-on-railsruby

解决方案


我认为您可以attr_accessor用于此目的。有了它,您可以设置和获取discount属性的值。

class Model2 < ActiveRecord::Base
  include Model1::Validate

  attr_accessor :discount

  validate :validate_discount

end

有了这个,你可以调用:

model2 = Model2.new
model2.discount = params[:discount] #or whatever you set value for discount

然后用你的Model1::Validate模块验证它。


推荐阅读