Rails:这段代码属于哪里?

时间:2011-02-03 13:20:23

标签: ruby-on-rails ruby-on-rails-3

我目前在我的控制器中有以下内容:

@items = Item.scoped
@items = @items.where('price >= ?', params[:price_min]) if params[:price_min]
@items = @items.where('price <= ?', params[:price_max]) if params[:price_max]
@items = @items.where(:size => params[:size]) if params[:size]
@items = @items.where(:colour => params[:colour]) if params[:colour]
# ...
@items = @items.paginate(:page => params[:page], :per_page => 10)

这是这个代码的正确位置,还是它应该在控制器中通过单个方法调用真正属于我的模型?即。

@items = Item.apply_filters(params)

我尽可能地坚持惯例。

非常感谢。

2 个答案:

答案 0 :(得分:2)

这是正确的,这一切都属于您的模型。这与我前几天审核的某人的代码非常相似。 MetaWhere gem也可能适合您的项目。

https://codereview.stackexchange.com/questions/500/how-to-filter-search-a-model-with-multiple-params-in-hash/501#501

答案 1 :(得分:1)

此外,如果您的项目总是作为范围,您可以将其default_scope。在你的模型中:

default_scope order("item_number"), where('price >= ?', 100)

(我不完全确定我的所有语法都是正确的,但它就是这样的。)

named_scope也可能会帮助你。