I am new to ruby on rails.I am trying to search brokers,whose name contains "Jam" but its giving me error of "wrong number of arguments (2 for 1)". Following is my code:
@brokers = Broker.where("firstName = ?", "Jam")
Why am i getting wrong number of arguments error?
答案 0 :(得分:3)
@brokers = Broker.where(firstName: "Jam")
答案 1 :(得分:2)
您应该将其括在数组中:
@brokers = Broker.where(["brokers.firstName = ?", "Jam"])
话虽这么说,我们需要知道你的rails版本(和ruby版本)。但是,如果您对使用LIKE
不感兴趣,可以执行
@brokers = Broker.where(firstName: "Jam")
ActiveRecord内置了一些sql-builder(如果你愿意,还支持arel),允许你编写Brokers.where(hash_key: value)
并将其转换为SELECT * FROM brokers WHERE hash_key = value
,这样就可以了以更快的方式编写简单的查询。
您发布的版本无效,因为where
接受单个字符串,数组或散列映射doesn't accept multiple params。
更新1(发现您使用mongomapper后):
在发现您使用mongomapper时,非常不同来自默认的Rails安装(小心如果您是新手,很多东西都赢了不适用于你,Rails默认使用activerecord),我相信你必须在通话结束时添加all
,就像在question中一样。如下所示:
@brokers = Broker.where(firstName: "Jam").all
另请注意这种查询方式不适用于mongomapper:(至少通过检查文档)
@brokers = Broker.where(["brokers.firstName = ?", "Jam"])
所以你被迫使用where(firstName: "Jam")
更新2(如何执行类似于SQL LIKE的查询):
如果您希望代码的行为方式与SQL LIKE
类似,就像您在评论中请求一样,您可以使用regexp,例如:
@brokers = Broker.where(firstName: /.*Jam.*/)
答案 2 :(得分:2)
在使用MongoMapper时,您可能需要使用all
。您可以尝试以下查询:
@brokers = Broker.all(firstName: "Jam")
OR
@brokers = Broker.where(firstName: "Jam").all
来源:http://mongomapper.com/documentation/plugins/querying.html
<强>更新强>
要使用like
行为,您可以使用regexp,例如:
@brokers = Broker.all(firstName: /Jam/)