如何在带有rails的深层类中包含辅助方法?

时间:2014-12-12 01:54:07

标签: ruby-on-rails ruby

我在app/helpers/logs_helper.rb中创建了一个方法:

def product_name(id)
  Product.find_by_id(id).name
end

我想在product_name中使用此app/helpers/logs_helper/products_log_helper.rb

module LogsHelper
  module ProductsLogHelper
    def search(params)
      product_log_name = product_name(params[:id])
    end
  end
end

但即使我使用它也找不到product_name

include LogsHelper

products_log_helper.rb文件中。

怎么做?我正在使用Rails 3.2

1 个答案:

答案 0 :(得分:2)

视图(以及扩展控制器)可以看到辅助方法;他们并不是真正放置"通用功能"的地方,而是为您的观点提供功能。

您可能想要做的事情可能是app/classes/log.rb

class Log
  def self.product_name id
    Product.find_by_id(id).name
  end
end

之后,您可以在Rails应用程序中随处使用:

Log.product_name 42

可以也获得一个控制器实例,但这很麻烦:

helpers = ApplicationController.new.view_context
helpers.product_name 42

我不确定你在这里尝试做什么,但这种方法也适用于你的模型::

class Product < ActiveRecord::Base
  # ...

  def self.get_name_by_id id
    self.find_by_id(id).name
  end
end

之后你可以使用:

Product.get_name_by_id 42