【发布时间】:2015-01-03 14:54:22
【问题描述】:
我有一个简单的应用程序,用户可以根据三个不同的参数按类别、学科和目标群体进行过滤。所有参数都是可选的。到目前为止它可以工作,但下面的控制器有点臃肿,我也认为三个 if 语句有点混乱。
有没有更清洁的方法来做到这一点?
def index
@listings = Listing.includes(:categorizations, :listing_disciplines, :listing_targets).page(params[:page])
if params[:category_id].present? && params[:category_id] != ""
@category_id = Category.find_by(id: params[:category_id])
@listings = @category_id.listings
end
if params[:discipline_id].present? && params[:discipline_id] != ""
@discipline_id = Discipline.find_by(id: params[:discipline_id])
@listings = @discipline_id.listings
end
if params[:target_id].present? && params[:target_id] != ""
@target_id = Target.find_by(id: params[:target_id])
@listings = @target_id.listings
end
if params.blank?
@listings
end
这是我的列表模型:
class Listing < ActiveRecord::Base
has_many :categorizations, dependent: :destroy
has_many :categories, through: :categorizations
has_many :listing_disciplines, dependent: :destroy
has_many :disciplines, through: :listing_disciplines
has_many :listing_targets, dependent: :destroy
has_many :targets, through: :listing_targets
has_attached_file :image, styles: { :medium => "200x200#" }
validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/
validates :title, presence: true, uniqueness: true
paginates_per 15
end
【问题讨论】:
-
胖模型和瘦控制器。列表域类应该是根据从控制器(或任何实体对一组列表发出请求)接收的数据实现过滤的类。只是我的 0.02 美元。
-
感谢@railsdog,我将尝试重构并在列表模型中实现过滤,以保持控制器精简。
标签: ruby-on-rails activerecord