1

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

4

1 回答 1

2

问题是@it_should您使用设置的实例变量attr_accessor在请求之间没有持久化,因此尽管您truenew操作中将其设置为,但一旦提交表单并触发其他操作(可能是create或),它将被重置。update

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

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

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

于 2012-11-10T02:04:30.080 回答