Ruby on rails rails模型之间的几个关联
我正在努力定义rails 4.2.4中的一些关系。目前,我有以下几点:Ruby on rails rails模型之间的几个关联,ruby-on-rails,ruby,postgresql,ruby-on-rails-4,Ruby On Rails,Ruby,Postgresql,Ruby On Rails 4,我正在努力定义rails 4.2.4中的一些关系。目前,我有以下几点: class Artist has_many :artist_members, dependent: :destroy end class ArtistMember < ActiveRecord::Base belongs_to :artist end 我也在为迁移而挣扎,在这方面的任何帮助都是受欢迎的。您想要实现的是一种自我参照的多对多关系 作为起点,您可以尝试以下解决方案: 模型 class Artist
class Artist
has_many :artist_members, dependent: :destroy
end
class ArtistMember < ActiveRecord::Base
belongs_to :artist
end
我也在为迁移而挣扎,在这方面的任何帮助都是受欢迎的。您想要实现的是一种自我参照的多对多关系 作为起点,您可以尝试以下解决方案: 模型
class Artist < ActiveRecord::Base
has_many :artist_members
has_many :artists, through: :artist_members,
source: :colleague
end
class ArtistMember < ActiveRecord::Base
belongs_to :artist
belongs_to :colleague, class_name: "Artist"
end
现在只想找回简
> joe.artists.where(name: "Jane")
Artist Load (0.4ms) SELECT "artists".* FROM "artists" INNER JOIN
"artist_members" ON "artists"."id" = "artist_members"."colleague_id"
WHERE "artist_members"."artist_id" = ? AND "artists"."name" = ?
[["artist_id", 1], ["name", "Jane"]]
=> #<ActiveRecord::AssociationRelation [#<Artist id: 2, name: "Jane",
art: nil, created_at: "2015-11-11 18:40:12", updated_at: "2015-11-11
18:40:12">]>
谢谢,这看起来确实是一个好的开始。在这个例子中,我可以在同事id中存储一个整数。我只需将艺术家的id发布为同事id即可。那么,如何将此id解析为还包含姓名?我想我需要在模型中添加其他内容?它与joe.artists一起工作。但是,我还有两个问题要解决。1目前,我们只能设置一名同事。2如何限制joe.artists仅获取某些字段而不是所有字段。非常感谢你的帮助我纠正了同事对艺术家的看法。关于你的问题1,我可以添加一个以上的artist_成员,并将其添加到示例中。对于你的问题2,我不太确定你想要实现什么。我添加了一个示例,仅选择一个artist_成员。如果不是这样,那就更准确地描述你想做什么。我通过以下方式解决了2:has_many:artists,->{select name},通过::artist_members,source::component。我想你不是真的明白我想要什么。我知道有可能有更多的艺术家。然而,我需要一个艺术家联盟成员来拥有更多的艺术家。现在它只能有一个。我想我需要把belngs_换成关系。明天我会再多看看。
class CreateArtists < ActiveRecord::Migration
def self.up
create_table :artists do |t|
t.string :name
end
end
def self.down
drop_table :artists
end
end
class CreateArtistMembers < ActiveRecord::Migration
def self.up
create_table :artist_members do |t|
t.integer :artist_id
t.integer :colleague_id
t.timestamps
end
end
def self.down
drop_table :artist_members
end
end
joe = Artist.create(name: "Joe")
jane = Artist.crate(name: "Jane")
joe.artists << jane
> joe = Artist.create(name: "Joe")
> jane = Artist.crate( name: "Jane")
> joe.artists << jane
> ben = Artist.crate(name: "Ben")
> joe.artists << ben
> joe.artists.where(name: "Jane")
Artist Load (0.4ms) SELECT "artists".* FROM "artists" INNER JOIN
"artist_members" ON "artists"."id" = "artist_members"."colleague_id"
WHERE "artist_members"."artist_id" = ? AND "artists"."name" = ?
[["artist_id", 1], ["name", "Jane"]]
=> #<ActiveRecord::AssociationRelation [#<Artist id: 2, name: "Jane",
art: nil, created_at: "2015-11-11 18:40:12", updated_at: "2015-11-11
18:40:12">]>