3

我的模型中有以下方法

def reset_review_status
   needs_review = true
   save
end

模型上有一个名为 needs_review 的属性,但是当我调试它时,它将它保存为一个新变量。如果我这样做self.needs_review=true,它工作正常。我没有 attr_accessible 子句,虽然我有一个 accept_nested_attributes_for。

关于为什么会发生这种情况的任何想法?

4

1 回答 1

4

在 ActiveRecord 中定义属性时,可以使用以下方法

# gets the value for needs_review
def needs_review
end

# sets the value for needs_review
def needs_review=(value)
end

您可以使用

needs_review = "hello"

但这与设置变量的方式相同。当您在方法中调用语句时,Ruby 赋予变量赋值更高的优先级,因此将创建一个具有该名称的变量。

def one
# variable needs_review created with value foo
needs_review = "foo"
needs_review
end

one
# => returns the value of the variable

def two
needs_review
end

two
# => returns the value of the method needs_review
# because no variable needs_review exists in the context
# of the method

根据经验:

  1. self.method_name =当你想在方法中调用 setter 时总是使用
  2. optionally use self.method_name when a local variable with the same name exists in the context
于 2011-02-10T23:39:15.770 回答