我在Rails中有一些自我项目的经验,我在为这个特定场景创建数据模型时遇到了一些麻烦。基本上,有许多用户,每个用户可以玩很多乐器,并且对于每个用户/乐器配对,都有一定的技能水平。
例如,Joe可以演奏技能等级为5的萨克斯,技能等级为2的单簧管和技能等级为3的小号.Bob可以演奏技能等级为1的长号,技能等级为4的萨克斯管,以及技能等级为5的单簧管。
我理解如何使用传统的SQL实现这一点,但我真的希望能够利用Rails ActiveRecord功能(所以,理论上,我可以这样做:
@users = User.all
@users.each do |user|
user.instruments do |ins|
puts ins.level #The current user's skill level on a particular instrument
end
end
如何创建迁移/模型来实现此目标?谢谢!
答案 0 :(得分:2)
模型基本上是:
class User < ActiveRecord::Base
has_many :instrument_skills
has_many :instruments, through: :instrument_skills
end
class InstrumentSkill < ActiveRecord::Base
belongs_to :instrument
end
class Instrument < ActiveRecord::Base
end
表示你可以创建像::
这样的模型rails g model User name:string
rails g model InstrumentSkill instrument_id:integer user_id:integer level:integer
rails g model Instrument name:string
然后您生成的迁移可能如下所示:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.timestamps
end
end
end
class CreateInstruments < ActiveRecord::Migration
def change
create_table :instruments do |t|
t.string :name
t.timestamps
end
end
end
class CreateInstrumentSkills < ActiveRecord::Migration
def change
create_table :instrument_skills do |t|
t.integer :user_id
t.integer :instrument_id
t.integer :level
t.timestamps
end
end
end