gpt4 book ai didi

ruby-on-rails - 小型 Controller 上的代码重构(瘦 Controller 胖模型)

转载 作者:数据小太阳 更新时间:2023-10-29 07:28:44 27 4
gpt4 key购买 nike

我有一个 Controller 操作,用于执行产品列表、分页和一些过滤器,例如类别(来自下拉列表)、标题(来自文本字段)、库存(来自复选框)这是我的 Controller :

  class ProductsController < ApplicationController
def index
@products = Product.where(active:1).where("title LIKE ?","%#{params[:title]}%")
if params[:stock]
@products=@products.where("stock = 0")
end
if params[:category]
@products=@products.where("category_id LIKE ?","#{params[:category]}")
end
@products= @products.paginate(:page => params[:page])
@categories= Category.all
end

我的模型是:

class Product < ActiveRecord::Base
belongs_to :category
...some validations...
end

为了让我的 Controller 变得更薄,我可以做些什么改变?谢谢

最佳答案

模型

class Product < ActiveRecord:::Base
scope :active, where(active: 1)

def self.with_stock(stock=nil)
return where(stock: 0) if stock
self
end

def self.categorized(category=nil)
return self.where(category: category) if category
self
end

def self.titled(title=nil)
return self.where("title LIKE ?", 'title') if title
self
end

def self.list(params)
title = params[:title]
category = params[:category]
page = params[:page]
self.titled(title).with_stock(stock).categorized(category)
.paginate(page).active
end
end

Controller

 def index
@products = Product.list(params)
end

不要在 Controller 中运送类别。在模板/部分中进行。仅来自 Controller 的一个实例变量。

关于ruby-on-rails - 小型 Controller 上的代码重构(瘦 Controller 胖模型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20610446/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com