在rails关系数据库中创建和实施has_one关系

bez*_*oon 1 activerecord ruby-on-rails ruby-on-rails-4

在查看的配置文件的桌子上工作.我有一个问题设置,这是正确的吗?我对has_many和has_one关系感到困惑.因为这是一个每个访问过的关系都有一行的表,所以我决定使用has_one.

这看起来是否正确,是否有办法在ActiveRecord中强制执行关系?

模型

class ViewedProfile < ActiveRecord::Base
  validates :viewed_profile_id, presence: true
  validates :profile_id, presence: true
  has_one :profile_id
  has_one :viewed_profile_id
end
Run Code Online (Sandbox Code Playgroud)

移民

class CreateViewedProfile < ActiveRecord::Migration
  def change
    create_table :viewed_profiles do |t|
      t.integer :profile_id
      t.integer :viewed_profile_id
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

编辑

此外,当我进入我的控制台并输入ViewedProfile时,没有任何内容出现.知道为什么?= c架构通常应该出现!

Pav*_*van 6

首先,您在术语Model名称之间感到困惑,而attributes(specially Foreign keys).Model将具有属性,并且关联将被设置为模型.

你必须像这样设置你的模型

class ViewedProfile < ActiveRecord::Base
  has_one : profile
end

Class Profile < ActiveRecord::Base
  belongs_to :viewed_profile
  validates :viewed_profile_id, presence: true
  validates :viewed_profile_id, uniqueness: true
end
Run Code Online (Sandbox Code Playgroud)

您的相应迁移文件应如下所示

class CreateViewedProfile < ActiveRecord::Migration
  def change
    create_table :viewed_profiles do |t|
      t.string :name
    end
  end
end

class CreateProfile < ActiveRecord::Migration
  def change
    create_table :profiles do |t|
      t.integer :viewed_profile_id
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我建议您在开始之前阅读这些指南文章.

协会

迁移

验证

  • 如果 `belongs_to` / `has_one` 确实是你想要的关系,你还需要在 `profiles` 的 `viewed_profile_id` 上添加一个唯一索引,否则没有什么可以阻止多个 `profiles` 具有相同的 `viewed_profile_id` (2认同)