【发布时间】:2014-10-01 02:04:31
【问题描述】:
我有一个 index 方法,看起来非常糟糕,像这样:
def index
if params[:brand]
@users = User.includes(:brand).where(brand_id: params[:brand]).order("#{sort_column} #{sort_direction}").page(params[:page]).per(10)
elsif params[:search]
@user = User.includes(:brand).find_by_client_code(params[:search])
redirect_to edit_user_path(@user)
elsif params[:page] == 'all'
@users = User.includes(:brand).order("#{sort_column} #{sort_direction}").all
elsif params[:state]
@users = User.includes(:brand).where(state: params[:state]).page(params[:page]).per(10)
else
@users = User.includes(:brand).order("#{sort_column} #{sort_direction}").page(params[:page]).per(10)
end
end
相当混乱,我知道,但它有效。现在我正在尝试对其进行重构,但我想不出在不使路线复杂化的情况下将其拆分为更小的集合的最佳方法。
def index
[:brand, :page, :search, :state].each do |param|
if params[:page] == 'all'
@users = User.includes(:brand).order(column + ' ' + direction)
elsif params.key?(param)
param
else
@users = User.includes(:brand).order(column + ' ' + direction)
.page(params[:page]).per(10)
end
end
end
def brand
@users = User.includes(:brand).where('brand_id in (?)', params[:brand])
.order(column + ' ' + direction).page(params[:page]).per(10)
end
def state
@users = User.includes(:brand).where(state: params[:state])
.page(params[:page]).per(10)
end
def search
@user = User.includes(:brand).find_by_client_code(params[:search])
redirect_to edit_user_path(@user)
end
上述方法不起作用,但您明白了。有人知道处理这种情况的好方法吗?干杯。
【问题讨论】:
-
我只是走上了同样的学习道路。我曾经将所有 AJAX 请求放入模板的操作中,但现在将它们放入自己的方法中。我在互联网上找不到关于这个主题的大量指导。我希望更有经验的人能加入进来,但我将大多数 AJAX 请求分解为他们自己的操作和路由,并对结果感到满意。逻辑更容易理解,我的行动也不会混乱。我的路线文件更多,但通过适当的组织,它看起来仍然很干净。好问题!
-
您使用的是哪个版本的 ruby?
-
我正在使用 Ruby
2.1.2。 -
我在这里也看不到响应块。你是用 HTML 还是 js 格式请求这个?
-
抱歉,是的,它已被删除。 HTML。
标签: ruby-on-rails ruby-on-rails-3 model-view-controller routing