作为我的标题,我想在will_paginate中设置多个条件,这是我模型的代码
class Room < ActiveRecord::Base
belongs_to :province
belongs_to :city
belongs_to :region
belongs_to :street
belongs_to :estate
def self.search(city_id, region_id, layout, page)
conditions = []
conditions.push("city_id = #{city_id}")
conditions.push("region_id = #{region_id}")
conditions.push("layout = #{layout}") if layout!=0
paginate :per_page => 5, :page => page,
:conditions => conditions
end
end
在控制器中调用它:
@rooms = Room.search(city, region,layout,params [:page])
但是......工作不对..只考虑第一个条件。
谁能给我一个示例代码? THX!
答案 0 :(得分:3)
更好的方法是使用这样的条件(在Rails中首选)
class Room < ActiveRecord::Base
belongs_to :province
belongs_to :city
belongs_to :region
belongs_to :street
belongs_to :estate
def self.search(city_id, region_id, layout, page)
conditions = {}
conditions.merge!(:city_id => city_id)
conditions.merge!(:region_id => region_id)
conditions.merge!(:layout => layout) if layout!=0
paginate :per_page => 5, :page => page,
:conditions => conditions
end
end
这将消除SQL注入的风险。
答案 1 :(得分:2)
试试这个:
class Room < ActiveRecord::Base
belongs_to :province
belongs_to :city
belongs_to :region
belongs_to :street
belongs_to :estate
def self.search(city_id, region_id, layout, page)
conditions = []
conditions.push("city_id = #{city_id}")
conditions.push("region_id = #{region_id}")
conditions.push("layout = #{layout}") if layout!=0
paginate :per_page => 5, :page => page,
:conditions => conditions.join(' and ')
end
end
这会将所有条件与“AND”连接起来。
您的代码不起作用的原因是当您使用数组作为条件时,第一个元素应该是具有SQL参数和剩余元素的条件 - 是参数值。例如:
Room.paginate(:conditions => ['city_id = ? and region_id = ?', city_id, region_id])
这就是为什么它只考虑第一个条件。