2015-10-31 3 views
1

У меня есть несколько моделей в моем приложении для разных типов контента, и мне часто нужно получить то, что было опубликовано недавно. На данный момент я использую helper_method :latest_content в своем контроллере приложений.Rails: Где я должен поместить этот метод?

Это лучшее место, где можно положить этот метод? Если да, то как мне написать rspec тесты для этого?

+0

Просьба указать код для нескольких моделей, а также метод 'last_content'. –

ответ

3

Похоже, что у вас есть общая функциональность для нескольких моделей. Rails имеет concerns, который позволяет вам это делать.

# app/models/concerns/searchable.rb 
module Searchable 
    extend ActiveSupport::Concern 

    module ClassMethods 
    def last_content 
     # ... here whatever is the content of :last_content 
    end 
    end 
end 


# app/models/model_x.rb 
class ModelX < ActiveRecord::Base 
    include Searchable 
    ... 
end 

# app/models/model_y.rb 
class ModelY < ActiveRecord::Base 
    include Searchable 
    ... 
end 
+0

Спасибо! Это похоже на то, что мне нужно. Я рассмотрю проблемы. –

+0

Возможно, я еще не понимаю проблемы - похоже, это просто добавляет общую функциональность в модели? Затем, если бы я захотел найти последний контент, мне нужно было бы сделать что-то вроде 'Article.last.latest_content', даже если это может вернуть« блог »или другой класс? (Чтобы уточнить, мне нужно знать самый последний контент по всем моим моделям. Не только внутри каждого.) В идеале я хотел бы иметь возможность называть 'link_to latest_content'. –

+0

Да. Обеспокоенность используется для общих моделей. Например. Возможность поиска, комментария, оценки и т. Д. Если вы хотите иметь метод, который возвращает общий «последний_контент» для разных моделей, вы можете использовать либо новый класс модели (возможно, содержащий другие распространенные методы для тех же моделей), либо помощник. Обычно я стараюсь содержать меньше кода в помощниках. – Hspazio

Смежные вопросы