2
module ProductsHelper
  attr_reader :products, :product    
end

上記を実行した結果はどうなりますか?Railsガイドでこれを見ましたが、理解できません。

4

2 に答える 2

2

ビューでandを呼び出すことにより@products、インスタンス変数から値を読み取ることができます。それらをコントローラーに設定する必要があります。@productproductsproduct

これらのリーダーは、実際にはあまり役に立ちません。

于 2012-04-26T22:40:29.813 に答える
2

これは、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 もあります。

于 2012-04-27T02:44:01.987 に答える