module ProductsHelper
attr_reader :products, :product
end
做上面的结果是什么?我在 Rails 指南中看到了这一点,只是不明白。
module ProductsHelper
attr_reader :products, :product
end
做上面的结果是什么?我在 Rails 指南中看到了这一点,只是不明白。
它将允许通过在视图中调用和从实例变量@products
中读取值。您仍然需要在控制器中设置它们。@product
products
product
这些读者并没有真正提供太多帮助。
这是一个 Ruby 约定,它创建一个称为 product 的“getter”和另一个称为 products 的“getter”。
例如,如果您有一个相当于 ProductHelper.new的对象ph 。
ph = ProductHelper.new
在该模块中存在一个实例变量。
def initialize
@products = "awesomeness"
end
如果不对模块进行发送,您将无法访问它,因为它会被视为该ph实例的私有。
(如果以下内容令人困惑,请不要担心,因为作为 Rails 新手,您不会看到太多。当您进入元编程时,您会看到更多。)
ProductsHelper.send :products
但是 attr_reader 将允许您读取方法或变量,就好像它是实例的属性一样。
ProductHelper.products
它基本上为您完成了这段代码。
def products
@products # which is an instance variable within the instantiated object.
end
尽管您通常只会在模型类中看到这些,而不是在 Modules 中……因为 Ruby 中的所有类都是模块,但这种行为也存在于该级别。如果您没有任何方法,那么将返回信息,然后调用 .products 只会返回 nil。
在 Ruby 中,也有 attr_writers 创建“setter”。
def products( value )
@products = value
end
这允许你这样做。
ph.products = "some awesome thing"
最后,您还拥有 attr_accessor,它在一个操作中创建了 getter 和 setter。