gpt4 book ai didi

ruby-on-rails - 使用 Rails 3 构建和处理多个参数查询

转载 作者:行者123 更新时间:2023-12-04 06:10:05 25 4
gpt4 key购买 nike

我对如何处理 URL 中的多个参数输入以在 Rails 3.2 中构建过滤器有点迷茫

基本上,我想拍http://example.com/products/?category=24http://example.com/products/?category=24&country=24一起工作。

我有以下型号ProductCountryCategoryCategorization

我可以在我的 ProductController

中构建一个简单的条件
def index
@products = product.all

if params[:country]
@products = Country.find(params[:country]).products
end

if params[:category]
@products = Category.find(params[:category]).products
end

end

我想知道解决这个问题的最佳方法,因为我的 CategoryProduct 模型通过 Categorization 模型通过 has_many 关联。

class Product < ActiveRecord::Base

has_many :categorization
belongs_to :country

end

class Category < ActiveRecord::Base
has_many :categorization
has_many :products, through: :categorization

attr_accessible :name

end

class Categorization < ActiveRecord::Base
belongs_to :category
belongs_to :product

attr_accessible :category, :product
end

我的 View 布局模板是一个简单的类别和国家链接列表。因此,如果有人点击一个名为“Toys”的类别并点击国家“England”,它应该建立一个如下链接:http://www.example.com/products/category=12&country_id=1

<div class="wrapper">
<div class="products">
</div>
<div class="sidebar>
<h2>Categories</h2>
<ul>
<% @categories.each do |category| %>
<li><%= link_to category.name, params.merge(category: category.id) %></li>
<% end %>
</ul>
<h2>Countries</h2>
<ul>
<% @countries.each do |country| %>
<li><%= link_to country.name, params.merge(country: country.id) %></li>
<% end %>
</ul>
</div>
</div>

更新

我已经接受了在模型类上创建过滤器的建议,下面的代码可以工作,但它看起来很困惑,而且不干。. 有人可以帮助解决另一种方法。

# Product Model

class Product < ActiveRecord::Base

# Search filter
def self.filter_by_params(params)
if params.has_key?(:category) && params.has_key?(:country_id)
scoped.joins(:categorization).where("category_id = ? AND country_id = ?", params[:category], params[:country_id])
elsif params.has_key?(:category)
scoped.joins(:categorization).where("category_id = ?", params[:category])
elsif params.has_key?(:country_id)
scoped.where(country_id: params[:country_id])
else
scoped
end
end

end

# Product Controller

def index
@product = Product.filter_by_params(params)
end

非常感谢您的建议。

WD

最佳答案

我会改变你的 ProductsController 如下:

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

然后在你的 Product 模型中:

def self.filter_by_params(params)
scoped = self.scoped
scoped = scoped.where(:country_id => params[:country_id]) if params[:country_id]
scoped = scoped.where(:category_id => params[:category_id]) if params[:category_id]
scoped
end

您需要更改 View 以传递 category_id 和 country_id。

关于ruby-on-rails - 使用 Rails 3 构建和处理多个参数查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12661655/

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