Ruby on Rails & Mongomapper : wrong number of arguments (2 for 1)

时间:2015-07-03 10:24:18

标签: ruby-on-rails mongomapper

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?

3 个答案:

答案 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/)