我总是在rails中遇到attr_accessor的一致性问题。我从未弄清楚我错过了什么细节......所以,我想我会在这里提出一个问题。
我有以下内容:
...Controller
new
@something = Something.new
@something.it_should = true
end
....Model
attr_accessor :it_should
def should_validate?
it_should
end
validates_presence_of :name, :if => :should_validate?
因此,我将控制器中的实例变量设置为true。我通过attr_accessor将该变量提供给模型。我把变量放到一个方法中,然后在验证中使用该方法。好像它应该工作。但是,它什么都不做。 it_should永远不会设置为true。页面加载正常,但字段未经验证。
我甚至试过这个......但是,它没有导致验证执行。
def should_validate?
true
end
使用att_accessor的技巧是什么?
答案 0 :(得分:2)
问题是您使用@it_should
设置的实例变量attr_accessor
不会在请求之间保留,因此尽管您在true
操作中将其设置为new
,一旦提交表单并触发其他一些操作(可能是create
或update
),它就会重置。
如果您想以这种方式验证字段,则必须在表单提交触发的操作中设置它,例如create
:
def create
@something = Something.new(params[:something])
@something.it_should = true
@something.save
...
end
这应该按预期触发name
验证。