ruby Rails属于自定义名称或与自定义名称有一个关联(_O)

l7mqbcuq  于 2022-11-22  发布在  Ruby
关注(0)|答案(2)|浏览(164)

我正在尝试使用自定义名称在活动记录对象之间创建关联
例如,我有一个User表和Post类,Post类有writer_idreader_id。我想为writer_idreader_id创建关联,这样我就可以调用post.writer来获取User对象。我尝试了多种方法(其中之一:Rails belongs_to with custom column name),但并没有解决这个问题。有人知道如何解除阻止这个问题吗?

ltqd579y

ltqd579y1#

试试这个

class Post < ApplicationRecord
  belongs_to :writer, class_name: 'User'
  belongs_to :reader, class_name: 'User'
end

对不起,最初我用class代替了class_name

3pvhb19x

3pvhb19x2#

在本例中,应该使用belongs_to,因为外键应该存储在posts表中:

class Post < ApplicationRecord
  belongs_to :author, 
    class_name: 'User'
end

class CreatePosts < ActiveRecord::Migration[7.0]
  def change
    create_table :posts do |t|
      t.references :author, 
        null: false, 
        foreign_key: { to_table: :users }
      t.timestamps
    end
  end
end

class User < ApplicationRecord
  has_many :posts_as_author,
    class_name: 'Post',
    foreign_key: :author_id
end

这将创建一个一对多关联。请注意,foreign_key选项在has_many关联中是必需的,因为它通常派生自类名。
has_one将不起作用,因为这意味着您将在users表上存储post_idhas_one在关联的另一端总是有一个对应的belongs_tohas_one基本上就是has_many加上一个附加到查询上的LIMIT 1,并生成略微不同的方法。
当谈到读者,我几乎可以保证你真正想要的是一个多对多的关联。

相关问题