module ProductsHelper
attr_reader :products, :product
end
上記を実行した結果はどうなりますか?Railsガイドでこれを見ましたが、理解できません。
module ProductsHelper
attr_reader :products, :product
end
上記を実行した結果はどうなりますか?Railsガイドでこれを見ましたが、理解できません。
ビューでandを呼び出すことにより@products
、インスタンス変数から値を読み取ることができます。それらをコントローラーに設定する必要があります。@product
products
product
これらのリーダーは、実際にはあまり役に立ちません。
これは、product と呼ばれる「ゲッター」と、products と呼ばれる別の「ゲッター」を作成する Ruby の規則です。
たとえば、ProductHelper.new と同等のオブジェクトphがあるとします。
ph = ProductHelper.new
そして、そのモジュール内にインスタンス変数が存在します。
def initialize
@products = "awesomeness"
end
phのそのインスタンスに対してプライベートと見なされるため、モジュールで send を実行せずにアクセスすることはできません。
(以下がわかりにくくても心配しないでください。これは、Rails の初心者ほど目にするものではないためです。メタ プログラミングを始めると、より多くのことを目にするようになります。)
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 もあります。
def products( value )
@products = value
end
これにより、これを行うことができます。
ph.products = "some awesome thing"
最後に、1 つのアクションでゲッターとセッターの両方を作成する attr_accessor もあります。