2011-07-15 25 views
0

我使用Rails 2.3.5,我有一個模型,我們稱之爲Post。我使用命名範圍來對Post應用各種排序。例如,在Post模型我有可能通過它的成績排名的帖子:Rails中的旁路控制器

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 

目前我的應用程序那樣工作,但實際上我並不需要在控制器「最好」的方法,我可以將它移動到模型後做這樣:

def self.best 
    self.order_by_acception_rate_desc(10) 
end 

,然後在視圖中我將會使集合,如:

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

我不知道哪種方法比較好,但使用該模型中的排名方法,我會避免創建路線爲每一種排名方法。什麼方法更好,有沒有比這更好的方法?

回答

1

與根據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

您不應該繞過控制器,並在視圖中包含很多邏輯。

您可以保留一條路線並根據params之一篩選Post模型。

你不會在這裏告訴足夠的回答更清楚,但你有大局。

0

你可以只留下視圖文件,它應該工作。