【问题标题】:Ruby on Rails & Mongomapper : wrong number of arguments (2 for 1)Ruby on Rails 和 Mongomapper:参数数量错误(2 比 1)
【发布时间】:2015-07-03 10:24:17
【问题描述】:

我是 ruby​​ on rails 的新手。我正在尝试搜索名称包含“Jam”的经纪人,但它给了我“参数数量错误(2 比 1)”的错误。以下是我的代码:

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

为什么我得到错误的参数数量错误?

【问题讨论】:

  • @brokers = Broker.where(firstName: "Jam")
  • 它给出了同样的错误。
  • 它应该像键值一样散列,名字是键,值是堵塞
  • 您的 Rails 版本?在您的帖子中复制并粘贴实际的错误跟踪
  • 它的 ruby​​ 1.9.3p484(2013-11-22 修订版 43786)

标签: ruby-on-rails mongomapper


【解决方案1】:
@brokers = Broker.where(firstName: "Jam")

【讨论】:

    【解决方案2】:

    当您使用 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/)
    

    【讨论】:

    • 我如何使用它?我想获取 firstName 中包含“Jam”的所有记录。
    【解决方案3】:

    你应该将它包含在数组中:

    @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")的那个

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

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

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

    【讨论】:

    • 给出错误:#<:plugins::querying::decoratedpluckyquery firstname: mongo_mapper-0.13.1>>
    • 所以你使用的是mongodb,这不是标准的rails安装,了解rails版本很重要。 ruby 1.9.3 有点过时了
    • 另外,引发了什么异常?这个#&lt;MongoMapper::Plugins::Querying::DecoratedPluckyQuery firstName: "Jam", transformer: #&lt;Proc:0xbd97d5c@/var/lib/gems/1.9.1/gems/mongo_mapper-0.13.1/lib/mongo_mapper/p‌​lugins/querying.rb:66 (lambda)&gt;&gt; 是一个对象,而不是一个错误。您是否尝试在其上运行 to_a 并查看它是否包含数据?
    • 检查我更新的答案,在查询末尾添加.all 应该可以解决它。
    • 谢谢,它与“所有”一起工作正常。我如何将它与“喜欢”一起使用?我想获取 firstName 中包含“Jam”的所有记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多