Ruby on rails 为什么产品搜索栏不工作?轨道4
我有一个简单的搜索栏,按名称查找产品,并按字母顺序排列结果 --->产品\u控制器.rbRuby on rails 为什么产品搜索栏不工作?轨道4,ruby-on-rails,ruby-on-rails-4,search,product,searchbar,Ruby On Rails,Ruby On Rails 4,Search,Product,Searchbar,我有一个简单的搜索栏,按名称查找产品,并按字母顺序排列结果 --->产品\u控制器.rb def index scope = Product if params[:search] scope = scope.search(params[:search]) end if params[:ordering] && ordering = ORDERS[params[:ordering].to_i] scope = scope.
def index
scope = Product
if params[:search]
scope = scope.search(params[:search])
end
if params[:ordering] && ordering = ORDERS[params[:ordering].to_i]
scope = scope.order(ordering)
end
@products = Product.includes(:current_price).all.stock.order('id DESC')
@product_detail = ProductDetail.new
end
--->product.rb
class Product < ActiveRecord::Base
has_many :product_details
has_many :prices
has_one :current_price, -> {
where('prices.id = (SELECT MAX(id) FROM prices p2 WHERE product_id = prices.product_id)')
}, class_name: 'Price'
accepts_nested_attributes_for :prices
accepts_nested_attributes_for :product_details
# It returns the products whose names contain one or more words that form the query
def self.search(query)
where(["name LIKE ?", "%#{query}%"])
end
# Returns a count with the available products on stock
def self.stock()
select('products.*, SUM(case when product_statuses.available=true then 1 else 0 end) as count')
.joins('LEFT JOIN `product_details` `product_details` ON `product_details`.`product_id` = `products`.`id`')
.joins('LEFT JOIN `product_statuses` ON `product_statuses`.`id` = `product_details`.`status`')
.group('products.id')
end
end
我不知道,我有一个非常类似的代码为我的客户控制器和模型做一个电话簿,它的工作
唯一不同的是库存,用于计算库存中有多少单位可用,并且运行良好
我真的需要帮助搜索栏:我已经审查了我所有的代码,看起来不错
感谢大家为什么@product变量没有使用您已经定义的范围。我认为应该是@products=scope.includes:current_price.all.stock.order'products.id DESC'
添加products.id DESC而不是id DESC,因为该语句对ActiveRecord可能不明确。此外,您还必须附加产品。到您的orderng参数。我使用了您的第一个建议,收到了以下错误:ActiveRecord::Statement产品中无效索引关于您的第二个建议,我不需要区分大小写的搜索我已更新了答案。我想您需要添加products.id DESC而不是id DESC,因为该语句对ActiveRecord可能不明确。此外,您还必须附加产品。到您的orderng参数。确定我用于解决方案-->@products=scope。包括:当前价格.all.stock.order'id DESC'////但我在where子句中获取列“name”不明确此查询的错误:SELECT products.*,SUMcase when product_statuses.available=true,则1或0结束为产品左加入产品详细信息产品详细信息产品详细信息产品详细信息产品详细信息。产品id=products.id左加入产品详细信息产品状态。id=product_details.status其中名称如“%corneta%”按产品分组。id按id下单,我将搜索模型更改为:where[products.name LIKE?,%{query}%]