所以有一些麻烦如何解决我的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
我现在被困住了。
我认为您可以使用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
模块对其进行验证。