Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – Rails ActiveRecord:find中的多个条件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这可能更像是 Ruby语法的东西,而不是别的.我有困难得到两个限制条件的SomeObject.find去.

分开,条件似乎有效:

if search != ''
  find(:all,:conditions => ['name LIKE ?',"%#{search}%"])
else
  find(:all,:conditions => ['active',1]).shuffle
end

我要做的第一种情况是这样的

find(:all,"%#{search}%"],['active',1])

但是这行抛出语法错误,意外的’)’,期待着tASSOC.

解决方法

Rails 2

find(:all,:conditions => [‘name LIKE?’,“%#{search}%”],[‘active’,1])不是传递散列到方法的正确语法.如果它是方法的最后一个参数,则可以将花括号从散列中放出,但在这种情况下,您将作为最后一个参数传递数组.

使用以下代替:

find(:all,:conditions => ["name LIKE ? AND active = ?","%#{search}%",1])

要么

params = {:search => "%#{search}%",:active => 1}
find(:all,:conditions => ["name LIKE :search AND active = :active",params])

轨3和4

您可能希望为最近的Rails版本做更多类似的操作:

scope :active,-> { where(active: truE) }
 scope :name_like,->(search) { where("name LIKE ?","%#{search}%") }

然后你会这样称呼:

YourModel.active.name_like("Bunnies")

这允许您在整个应用程序中以不同的组合重用这些特定的查询.它还使代码检索数据超级容易阅读.

如果您不喜欢范围语法,还可以将它们定义为类方法:

def self.active
  where(active: truE)
end

def self.name_like(search)
  where("name LIKE ?","%#{search}%")
end

您也可以即时链接示波器.这将允许您开始构建关系对象链,然后根据条件选择包括其他对象.当应用于原始问题以获得相同的结果时,它可以是什么样子:

results = active
results = results.name_like(search) if search.present?

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – Rails ActiveRecord:find中的多个条件全部内容,希望文章能够帮你解决ruby-on-rails – Rails ActiveRecord:find中的多个条件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。