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