在rails 3中使用attr_accessor

时间:2012-11-10 01:32:35

标签: ruby-on-rails-3 validation attr-accessor

我总是在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的技巧是什么?

1 个答案:

答案 0 :(得分:2)

问题是您使用@it_should设置的实例变量attr_accessor不会在请求之间保留,因此尽管您在true操作中将其设置为new ,一旦提交表单并触发其他一些操作(可能是createupdate),它就会重置。

如果您想以这种方式验证字段,则必须在表单提交触发的操作中设置它,例如create

def create
  @something = Something.new(params[:something])
  @something.it_should = true
  @something.save
  ...
end

这应该按预期触发name验证。