我使用Rails 2.3.5并且我有一个模型,我们称之为Post。我使用命名范围在Post上应用不同种类的排序。例如,在Post模型中,我有可能按照其分数对帖子进行排名:
named_scope :order_by_acception_rate_desc,
Proc.new { |limit| { :limit => limit, :order => "acception_rate desc" } }
在Post Controller中我有:
def best
@best_posts = Post.order_by_acception_rate_desc(10)
end
在视图中我只渲染这个集合@best_posts:
<%= render :partial => "post", :collection => @best_posts
目前我的应用程序正在这样工作,但实际上我不需要在Controller中使用“最佳”方法,我可以将其移动到Model Post中,如下所示:
def self.best
self.order_by_acception_rate_desc(10)
end
然后在视图中我将渲染集合:
<%= render :partial => "post", :collection => Post.best
我不知道哪种方法更好,但是使用模型中的排名方法,我可以避免为每种排名方法创建路线。什么方法更好,有没有比这些更好的方法?
答案 0 :(得分:1)
根据Rails惯例,逻辑应该分开,
我想请你试试:
#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 %>
答案 1 :(得分:0)
您不应绕过控制器并在视图中包含太多逻辑。
您可以保留一条路线并根据Post
之一过滤params
模型。
你在这里说得不够清楚,但你有大局。
答案 2 :(得分:0)
您可以只保留视图文件,它应该可以正常工作。