has_many通过与桥接表中的其他列关联

时间:2014-05-06 09:57:24

标签: ruby-on-rails ruby ruby-on-rails-4

我有两个表,课程和类别,我有一个与course_id和category_id的桥接表分类。我在表category_rank中添加了一个附加列,这是一个整数,用于根据用户首选项对类别进行排名。我正在努力在数据库中创建条目。这是我的表格:

  create_table "categories", force: true do |t|
    t.string   "name"
    t.boolean  "is_active",  default: true
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "categorisations", force: true do |t|
    t.integer  "category_id"
    t.integer  "course_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "category_rank"
  end


create_table "courses", force: true do |t|
    t.string   "title"
    t.datetime "start_date"
    t.string   "duration"
    t.boolean  "is_active",                     default: true
    t.integer  "state"
    t.integer  "partner_id"
    t.integer  "user_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "photo"
    t.integer  "partner"
    t.boolean  "is_published",                  default: false    
  end

以下是模型

class Course < ActiveRecord::Base
  has_many :categorisations
  has_many :categories, :through=> :categorisations 
  belongs_to :partner
end
class Category < ActiveRecord::Base
  has_many :categorisations 
  has_many :courses, :through=> :categorisations
  belongs_to :user
end
class Categorisation < ActiveRecord::Base
  belongs_to :category
  belongs_to :course
end

当我创建一个课程时,我使用了一个类别对象列表,这很好用

@course.categories << @categories

但我现在需要在桥接表中为每个类别添加一个等级

2 个答案:

答案 0 :(得分:1)

我建议你为连接表创建一个新实例 - 分类。

@c = Categorisation.find_or_create_by(<course and category>)
@c.rank = <assign rank>
@c.save!

答案 1 :(得分:0)

您可以访问以下额外属性:

@course.categorisations.first.rank