【发布时间】:2011-09-24 18:58:19
【问题描述】:
class ArticlesController < ApplicationController
def index
@articles = Article.by_popularity
if params[:category] == 'popular'
@articles = @articles.by_popularity
end
if params[:category] == 'recent'
@articles = @articles.by_recent
end
if params[:category] == 'local'
index_by_local and return
end
if params[:genre]
index_by_genre and return
end
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @articles }
end
end
def index_by_local
# 10 lines of code here
render :template => 'articles/index_by_local'
end
def index_by_genre
# ANOTHER 10 lines of code here
render :template => 'articles/index_by_genre'
end
end
从上面可以看到。我的控制器并不完全瘦。它的作用是,根据传递的参数,它与模型交互以过滤掉记录。
如果 params[:local] 或 params[:genre] 已通过。然后分别调用自己的方法(def index_by_local和def index_by_genre)做进一步处理。这些方法还加载自己的模板,而不是 index.html.erb。
这对于控制器来说是不是很典型?或者我应该以某种方式重构它?
【问题讨论】:
标签: ruby-on-rails-3 refactoring