我正在努力选择项目中建模类别的最佳方法。
用户创建演出,每个演出可以有多种类型。 类型必须是搜索和搜索可翻译。
以下是我尝试的内容:
我已经读过actastaggableon
如果搜索多个标签,那么gem和ransack并不能很好地协同工作。另外,我不需要动态创建新类型。
我在我的演出模型中尝试了<%= form.input :genre, :collection => [t('genre.alternative'), t('genre.blues') etc etc... multiple: true
和genre:string
属性,该属性适用于搜索,但仅限于保存它的语言。
在我的演出模型中制作流派模型并使用具有genre_id:integer
属性的每个流派的ID有效,但不允许保存多个流派。
有没有办法在模型属性中添加多个ID? 是否有任何我不知道的方法?
答案 0 :(得分:1)
您需要加入表,以便在Gig和Genre之间建立多对多关系。
Genre
has_many :gig_genres
has_many :gigs, :through => :gig_genres
Gig
has_many :gig_genres
has_many :genres, :through => :gig_genres
GigGenre
belongs_to :gig
belongs_to :genre
答案 1 :(得分:1)
由于用户有很多演出,请将has_many :gigs
添加到您的用户模型,然后在您的演示模型中添加belongs_to :user
。您需要为Gig表添加user_id:integer
属性以建立关系。
此外,由于Gig有许多种类,因此适用相同的步骤。在您的演员模型中添加has_many :genres
并在您的流派模型中添加belong_to :gig
。您需要在Genre表中添加gig_id:integer
才能建立此关系。
希望有所帮助
答案 2 :(得分:0)
最后,我将其他两个答案混合在一起。
Gig模型+带
的流派模型def change
create_table :genres_gigs, :id => false do |t|
t.integer :genre_id
t.integer :gig_id
end
end
迁移。
我使用此页面作为指南,这也有助于视图和控制器。 http://habtmexample.herokuapp.com/instructions