这可能会被视为rails 3 associations error的重新发布。但它是我无法理解的东西。但是好的......继续这个交易......我在这里问了一个与表模式有关的问题。帖子为what is bad in this table schema structure,查询为:
`CREATE TABLE "pages" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"title" varchar(255),
"body" varchar(255),
"author" varchar(255),
"email" varchar(255),
"reference" varchar(255),
"created_at" datetime,
"updated_at" datetime);`
我被建议我应该为作者创建单独的表,这就是我尝试和搞砸的内容。任何人都可以告诉我协会应该如何与我的方案一起工作?我真的需要很好地了解ROR协会。
以下是我的网页迁移代码:
class CreatePages < ActiveRecord::Migration
def self.up
create_table :pages do |t|
t.string :title, :unique => true, :limit => 50
t.string :body, :limit =>255
t.string :email, :unique => true, :limit => 50
t.string :reference, :limit => 40
t.timestamps
end
end
def self.down
drop_table :pages
end
end
这是我的作者迁移:
class CreateAuthors < ActiveRecord::Migration
def change
create_table :authors do |t|
t.string :author, :unique => true, :null => false, :limit => 50
t.timestamps
end
end
end
答案 0 :(得分:1)
如果我们通过逻辑思考,作者可能有很多页面,页面属于作者。如果是这种情况,我们可以通过铁路关系来表达这一点。
class Author < ActiveRecord::Base
has_many :pages
class Page < ActiveRecord::Base
belongs_to :author
为了支持这一点,您需要创建一个迁移,以确保您的pages表中有author_id列。 Rails负责其余部分。您将获得所有关系语义,如:
my_page.author.email
my_page.author.name
(假设您的Author类具有此类属性)
请注意,如果您的用户是您的作者,则您不一定必须拥有Author类。如果每个作者都是用户(并且您使用User类进行身份验证和帐户维护),您仍然可以将用户称为类的作者
class Page < ActiveRecord::Base
belongs_to :author, :class_name => "User"
可以让你保持好的作者语义,使它们与你的用户类相对应。
最后请注意,如果要在删除作者对象时自动删除与作者关联的任何页面,可以向作者类添加依赖
class Author < ActiveRecord::Base
has_many :pages, :dependent => :destroy
答案 1 :(得分:1)
为作者创建一个单独的表可能是一个好主意(尽管如果这对你来说效果很好,并且你没有任何性能问题,你可以保持原样)。
@Marc Talbot已经就如何在Rails模型中设置关联提供了一个很好的答案。当然,您还需要迁移数据库。这是做什么的: