Ruby 在 Rails & Mongomapper 上:参数数量错误(2 对 1)

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

我是 rails.I 上 ruby 的新手,我正在尝试搜索名称包含 "Jam" 的经纪人,但它给我的错误是 "wrong number of arguments (2 for 1)"。以下是我的代码:

@brokers = Broker.where("firstName = ?", "Jam")

为什么我会收到错误的参数个数错误?

@brokers = Broker.where(firstName: "Jam")

你应该把它放在数组中:

@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, which is very different from a default Rails installation (be careful if you are new, lot of stuff won't apply to you, Rails by default uses activerecord), I believe you have to add all at the end of your call, like they do in this question后。所以像:

@brokers = Broker.where(firstName: "Jam").all

另请注意,这种查询方式不适用于 mongomapper:(至少通过检查文档)

@brokers = Broker.where(["brokers.firstName = ?", "Jam"])

所以你被迫使用 where(firstName: "Jam")

更新2(如何执行类似于SQL LIKE的查询):

如果你想让代码以类似于 SQL LIKE 的方式运行,正如你在评论中请求的那样,你可以使用正则表达式,比如:

@brokers = Broker.where(firstName: /.*Jam.*/)

由于您正在使用MongoMapper,您可能需要使用all。您可以尝试以下查询:

@brokers = Broker.all(firstName: "Jam")

@brokers = Broker.where(firstName: "Jam").all

来源:http://mongomapper.com/documentation/plugins/querying.html

更新:

要使用 like 行为,您可以使用正则表达式,例如:

@brokers = Broker.all(firstName: /Jam/)