【问题标题】:When using has_many with custom foreign_key i get an undefined method error, in Rails 3在 Rails 3 中使用带有自定义 foreign_key 的 has_many 时出现未定义的方法错误
【发布时间】:2013-02-22 12:14:10
【问题描述】:

第一个模型:

class FaqGroup < ActiveRecord::Base
  has_many :faqs, :foreign_key => 'group_id', :order => 'position'

  acts_as_list
end

第二种模式:

class Faq < ActiveRecord::Base
  belongs_to :faq_group, :foreign_key => 'group_id'

  acts_as_list :scope => :faq_group
end

控制器:

def new_faq
  @group = FaqGroup.find(params[:id])

  @faq = @group.faqs.create(question: 'lorem', answer: 'ipsum')

结束

当我在浏览器中加载它时,我收到以下错误:

undefined method `faq_group_id' for #<Faq:0xb56fcde4>

所以,基本上当我尝试创建一个新的关联对象时,foreign_key 就会被忽略。如果我放弃自定义 :foreign_key 一切都会很好。

另一个观察结果是,如果我这样做:

@group = FaqGroup.find(params[:id])
@faqs = @group.faqs

它工作正常,所以它似乎只有在创建新的关联对象时才使用 foreign_key 有问题。

谢谢!

【问题讨论】:

    标签: ruby-on-rails-3 activerecord has-many


    【解决方案1】:

    检查belongs_to association with the foreign key option

    如前所述,

    对于foreign key in belongs_to-

    "指定用于关联的外键。默认情况下,这被猜测为带有“_id”后缀的关联名称。因此,定义belongs_to :person关联的类将使用“person_id”作为默认值:foreign_key。同样,belongs_to :favorite_person, :class_name => "Person" 将使用 "favorite_person_id" 的外键。"

    所以在上下文中,错误是因为你定义了:

    class Faq < ActiveRecord::Base
      belongs_to :faq_group, :foreign_key => 'group_id'
    

    此关联需要 faq_group_id 作为外键,而不是 group_id

    错误也是——

    undefined method `faq_group_id' for #<Faq:0xb56fcde4>
    

    【讨论】:

    • 据我了解,如果要指定与默认外键不同的外键,则使用 :foreign_key 参数。这就是我正在做的事情。如果我想坚持使用默认值(faq_group_id),则根本不需要更改 :foreign_key 参数。
    • 这不是正确的关联,因为您说的是faq belongs to faq_group,但是您将外键关联为组的ID。当组从不与常见问题解答相关时,外键怎么可能是group_id?两个表之间应该存在关系,即groupfaq。如前所述,外键应在末尾添加_id 后缀belongs to
    猜你喜欢
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多