2013-12-04 3 views
0

В моем приложении 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 в вспомогательном модуле, потому что я использую его через разные контроллеры.

Спасибо за любую помощь.

+0

Хорошо. Просто понял, что это не сработает. Вы не можете сделать заказ в вспомогательном методе. Как и когда вы делаете .projects ... Затем класс является activerecords класса Project. Какая модель. Если вы не используете область действия, вы не можете заказать какую-либо активную запись. –

+0

Попробуйте расширить активный базовый класс записи, чтобы добавить собственный метод заказа. http://stackoverflow.com/questions/2328984/rails-extending-activerecordbase. Обратитесь к этому. Http://stackoverflow.com/questions/2328984/rails-extending-activerecordbase –

ответ

1

Я знаю, что вы имеете в виду, но правильный путь является использование модели прицелы:

class Project < ActiveRecord::Base 
    #... 

    scope :custom_order, order('name ASC') 

    #... 
end 
+0

Спасибо, но я намерен использовать эту область действия для разных контроллеров. И, честно говоря, мой метод custom_order является немного более динамичным, чем тот, который я опубликовал выше для краткости. – Tintin81

+0

Вы можете использовать эту область действия для разных контроллеров. – NARKOZ

0

Переместить его в контроллер приложения и сделать его вспомогательным методом.

Или включите вспомогательный модуль приложения в контроллер приложения. Таким образом, вы сможете получить доступ ко всем прикладным вспомогательным методам во всех контроллерах.

+0

Я делаю это уже. Но он не работает и дает мне ошибку выше. – Tintin81

0

Обычно Помощники предназначены для визуализации результатов на основе HTML, Там вы не могли бы ожидать запросов на основе модели.

Как только вы напишите вспомогательный метод в помощнике приложения, его можно вызвать в любом представлении.

Измените запрос, как этот

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

или иным образом в вашей модели сделать это с размахом.

scope :custom_order, order('name ASC') 
Смежные вопросы