Rails还是新手。
我确定我在这里尝试做的是一个命名约定。
你有帖子,然后你就有了标签(我实际上并没有制作博客,但我们都熟悉这种情况)。
我设置了这样的标签:
ruby script/generate scaffold tag name:string
然后我会创建一个这样的链接表:
ruby script/generate migration x_tag_post tag_id:integer post_id:integer
那么在模型中我会有xTagAsset
belongs_to :tags
belongs_to :posts
然后在标签和帖子中我会说
has_many :x_tag_posts
这是正确的方法吗?我觉得有更好的东西。
答案 0 :(得分:5)
您需要使用内置的Active Record has_and_belongs_to_many或has_many :through =>选项
HABTM假设存在一个遵循一些基本约定的表,并允许您使用:
class Tags < ActiveRecord::Base
has_and_belongs_to_many :assets
end
class Asserts < ActiveRecord::Base
has_and_belongs_to_many :tags
end
有很多人通过明确声明加入表:
class Tags < ActiveRecord::Base
has_many :assets, :through => "assets_tags"
end
class Asserts < ActiveRecord::Base
has_many :tags, :through => "assets_tags"
end
我上面链接的指南详细介绍了实施情况。
答案 1 :(得分:1)
我更喜欢the has many through association,就像Toby Hede写的那样。
class Post < ActiveRecord::Base
has_many :assets
has_many :tags, :through => :assets
end
class Asset < ActiveRecord::Base
belongs_to :post
belongs_to :tag
end
class Tag < ActiveRecord::Base
has_many :assets
has_many :posts, :through => :assets
end
希望这会有所帮助:)
答案 2 :(得分:0)
从纯粹的数据库角度来看,您创建了一个名为PostTag的表,它看起来像这样。 (这是SQL Server语法,YMMV。)
CREATE TABLE PostTag
(PostId INT,
TagId INT
CONSTRAINT PK_PostTag PRIMARY KEY (PostId, TagId))