これは本質的に、両方の場所でコードに拡張されたKaerosのコメントです。
変数をlibフォルダーではなくコントローラーに保存する必要があります。lib内のファイルは、モデルのニーズを認識していないはずです。保存する場所や方法がわからなくても、値を返すのは同じように幸せです。
module ProdInfo
def get_item_info(id)
# in your comment you said you have multiple values you need to access from here
# you just need to have it return a hash so you can access each part in your view
# gather info
{ :inventory => 3, :color => "blue", :category => "tool"} # this is returned to the controller
end
end
Rails 3には、ロードするパスを指定できる構成変数もあり、デフォルトにはlibパスが含まれていると思います。require
これは、すべてのエントリが必要なわけではないことを意味します。Module#method
ペアを呼び出すことができます。
class RecommendationsController < ApplicationController
# require 'get_prod_info'
# include ProdInfo
# => In Rails 3, the lib folder is auto-loaded, right?
def index
@product = Product.find(params["product_id"])
@item_info = ProdInfo.get_item_info(@product.id) # the hash you created is saved here
end
end
ビューで使用する方法は次のとおりです。
# show_item.text.erb
This is my fancy <%= @item_info[:color] %> item, which is a <%= @item_info[:type] %>.
I have <%= @item_info[:inventory] %> of them.