从Rails中的Model对象中调用访问器方法

时间:2011-02-10 23:01:56

标签: ruby-on-rails ruby model attr-accessible

我的模型中有以下方法

def reset_review_status
   needs_review = true
   save
end

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

有关为何会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:4)

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

# gets the value for needs_review
def needs_review
end

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

您可以使用

调用setter
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. 如果要在方法
  2. 中调用setter,请始终使用self.method_name =
  3. 当上下文中存在具有相同名称的本地变量
  4. 时,可以选择使用self.method_name