Nic*_*ick 2 activerecord ruby-on-rails multiple-conditions conditional-statements
我正在尝试使用数组动态构建一组条件,如第一个答案所示:模型中的一个或多个参数使用Ruby on Rails查找条件.然而,我似乎做错了什么,我不确定我正在尝试的是从根本上是不健全的,或者我是否只是拙劣的语法.
我在这里简化到一个单一的条件,试图说明问题,因为我试图在这些线上构建一个简单的概念证明,然后再分层我正在争论的5种不同的条件样式.
这有效:
excluded.push 12
excluded.push 30
@allsites = Site.all(:conditions => ["id not in (?)", excluded])
Run Code Online (Sandbox Code Playgroud)
这导致私有方法'scan'被称为错误:
conditionsSet = []
excluded.push 12
excluded.push 30
conditionsSet << ["id not in (?)", excluded]
@allsites = Site.all(:conditions => conditionsSet)
Run Code Online (Sandbox Code Playgroud)
谢谢你的建议.我不确定是否正确将此作为后续项目放在我在顶部注意到的相关问题/答案中.因为我有一个问题不是答案.如果有更好的方式发布与现有帖子相关的内容,请告诉我.
试试这个:
Rails 2.3
class Site < ActiveRecord::Base
def self.build_conditions(ids, name=nil, state=nil)
cond = []
cond << send(:sanitize_sql_array, ["id NOT IN (?)", ids]) unless ids.empty?
cond << send(:sanitize_sql_array, ["name = ? ", name]) unless name
cond << send(:sanitize_sql_array, ["state = ? ", state]) unless state
cond.join(" and ")
end
end
Run Code Online (Sandbox Code Playgroud)
现在控制器中的某个地方:
Site.all(:conditions => Site.build_conditions([1,2]))
Site.all(:conditions => Site.build_conditions(nil, "ABC"))
Run Code Online (Sandbox Code Playgroud)
Rails 3
class Site < ActiveRecord::Base
def self.exclude_ids_by_name_and_state(ids, name=nil, state=nil)
result = scoped
result = result.where("id NOT IN (?)", ids) if ids.present?
result = result.where(:name => name) if name.present?
result = result.where(:state => state) if state.present?
result
end
end
Run Code Online (Sandbox Code Playgroud)
现在控制器中的某个地方:
Site.exclude_ids_by_name_and_state([1,2])).all
Site.exclude_ids_by_name_and_state(nil, "ABC").all
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6483 次 |
| 最近记录: |