2014-04-24 79 views
1

处理查看的配置文件表。我有一个问题设置它,这是正确的吗?我对has_many和has_one的关系感到困惑。因为这是一个对每个访问关系都有一排的表,所以我决定去用has_one。在rails关系数据库中创建并强制执行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 

迁移

class CreateViewedProfile < ActiveRecord::Migration 
    def change 
    create_table :viewed_profiles do |t| 
     t.integer :profile_id 
     t.integer :viewed_profile_id 
    end 
    end 
end 

编辑

而且当我去我的控制台和I型ViewedProfile没有出现。任何想法为什么? = c架构通常应该显示出来!

回答

6

首先,你的条款之间迷糊中Model名称和attributes(specially Foreign keys)。型号将有属性协会将被设置为模式

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

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 

而且你相应的迁移文件应该是这样的

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 

我建议在开始之前仔细阅读本指南的文章。

Associations

Migrations

Validations

+0

如果'belongs_to' /'has_one'是真正的你想你还需要添加'viewed_profile_id'唯一索引的关系'profiles',否则没有什么能够阻止多个'个人资料'拥有相同的'viewing_profile_id' – kittyminky