Обход контроллера в Rails - PullRequest
0 голосов
/ 16 июля 2011

Я использую Rails 2.3.5, и у меня есть модель, назовем ее Post.Я использовал именованные области, чтобы применять различные виды сортировки к Post.Например, в модели Post у меня есть возможность ранжировать сообщения по их оценкам:

named_scope :order_by_acception_rate_desc,
Proc.new { |limit| { :limit => limit, :order => "acception_rate desc" } }

В контроллере сообщений у меня есть:

def best
    @best_posts = Post.order_by_acception_rate_desc(10)
end

В представлении я просто отображаю эту коллекцию@best_posts:

<%= render :partial => "post", :collection => @best_posts

В настоящее время мое приложение работает так, но на самом деле мне не нужно, чтобы метод Controller был лучшим в Controller, и я мог бы переместить его в Model Post, выполнив следующее:

def self.best
    self.order_by_acception_rate_desc(10)
end

и затем в представлении я бы отобразил коллекцию следующим образом:

<%= render :partial => "post", :collection => Post.best

Я не знаю, какой подход лучше, но используя методы ранжирования в Модели, я мог бы избежатьсоздать маршруты для каждого из методов ранжирования.Какой подход лучше, есть ли лучший подход, чем эти?

Ответы [ 3 ]

1 голос
/ 16 июля 2011

в соответствии с соглашениями Rails логика должна быть отделена,

  1. контроллеры обрабатывают разрешения, авторизацию / авторизацию, назначают переменные экземпляра / класса
  2. Помощники обрабатывают html-логику, что показать / скрыть пользователю
  3. представления не должны предоставлять никакой логики, проверка прав доступа. думать об этом с точки зрения дизайнера
  4. модели обрабатывают сбор / обработку данных через ORM

Я бы хотел попросить вас попробовать:

#helper
def self.best(limit)
  all(:limit => limit, :order => "acception_rate desc")
end

#controller
@best_posts = Post.best

#view
<%= render :partial => "post", :collection => @best_posts %>
0 голосов
/ 16 июля 2011

Вы можете оставить только файл просмотра, и он должен работать.

0 голосов
/ 16 июля 2011

Вы не должны обходить контроллер и включать много логики в ваш взгляд.

Вы можете сохранить один маршрут и отфильтровать модель Post в зависимости от одного из params.

Вы не говорите здесь достаточно, чтобы ответить более четко, но у вас есть общая картина.

...