如何将订单助手包含在不同的控制器中?

时间:2013-12-04 19:13:06

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

在我的Rails应用程序中,我有这个:

class ProjectsController < ApplicationController

  include ApplicationHelper

  def index
    @payments = current_user.projects.custom_order
  end

  ...

end

module ApplicationHelper

  def custom_order 
    order("name ASC")
  end

end

但是,在我的index视图中,我收到此错误:

undefined method 'custom_order' for #<Class:0x007f8be606ff80>

如何做到这一点?

我想将custom_order方法保留在帮助程序模块中,因为我在各种不同的控制器中使用它。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我知道你的意思,但正确的方法是使用模型范围:

class Project < ActiveRecord::Base
  #...

  scope :custom_order, order('name ASC')

  #...
end

答案 1 :(得分:0)

将其移动到应用程序控制器。并使其成为辅助方法。

或者在应用程序控制器中包含应用程序助手模块。因此,您将能够访问所有控制器中的所有应用程序帮助程序方法。

答案 2 :(得分:0)

通常,View Helpers用于渲染基于html的输出,在那里你不能指望基于模型的查询。

在Application帮助程序中编写辅助方法后,可以在Any视图中调用它。

像这样更改您的查询

@payments = current_user.projects.order("name")

或者在您的模型中使用范围制作。

scope :custom_order, order('name ASC')