Ruby on rails 使用自定义时为nil未定义的方法名有很多关系

Ruby on rails 使用自定义时为nil未定义的方法名有很多关系,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在尝试为我的一个模型创建最简单的关系。它的定义如下: # i know it doesn't make much sense. I'm using such ridiculous # where case to keep things simple for now has_many :jobs, -> { where(id: 1) }, class_name: SidekiqJob 但是,当我尝试调用该关系时,例如使用MyModel.last.jobs,rails抛出: NoMet

我正在尝试为我的一个模型创建最简单的
关系。它的定义如下:

# i know it doesn't make much sense. I'm using such ridiculous 
# where case to keep things simple for now
has_many :jobs, -> { where(id: 1) }, class_name: SidekiqJob
但是,当我尝试调用该关系时,例如使用
MyModel.last.jobs
,rails抛出:

NoMethodError: undefined method `name' for nil:NilClass
from /Volumes/HDD/Users/michal/.rvm/gems/ruby-2.1.1/gems/activerecord-4.0.3/lib/active_record/relation/merger.rb:141:in `block in filter_binds'
有人知道这里出了什么问题吗

  • ruby 2.1.1
  • rails 4.0.3

编辑: 原始关联定义:

has_many :jobs, (obj) -> { where('jid LIKE ?', "#{obj.superjob_id}%") }, class_name: SidekiqJob
如果不深入源代码查看是否在
class\u name
值上调用了类似
to\u s
的内容,则语法似乎不正确,需要在类名周围加引号:

has_many :jobs, -> { where(id: 1) }, class_name: "SidekiqJob"

请参见此处的铁路指南:


结果证明它与ruby/active_记录版本有关。根据这条线索:


我所做的“修复”是将我的ruby版本更改为
2.1.10
。然后,我消除了这些错误(因为它们被扔到了更多的地方)。无论如何,我仍然无法使用自定义where语句
包含
我在OP中定义的关系。似乎不可能使用自定义where语句
包含
关系。

调用
名称
的位置在哪里?我没有在你提供的代码中看到它,只是在错误中。我认为has_许多只适用于对象,而不适用于模型。作业方法应适用于您的作业对象model@WesFoster哪儿都不叫。至少不是我的代码。你试过不同的列名在哪里,而不是id-它会工作吗?你在这里设置id条件的目的是什么(我得到了一个简单的存根,但你的目标是什么)?以防万一,像
这样的关系有很多
选项,比如
外键
来指定用于关系的子表的列名。我之所以这样问,是因为我在您给出的行中打开了Rails源代码-。调用正在从方法进行。可能是您的where子句以某种方式被删除(或删除)了连接两个表(按id列)的where子句。我还是会犯同样的错误。
has_many :jobs, -> { where(id: 1) }, class_name: "SidekiqJob"
class Author < ApplicationRecord
  has_many :confirmed_books, -> { where "confirmed = 1" },
    class_name: "Book"
end
has_many :clients, :class_name => :Client # Note that the symbol need to be capitalized