Rails:在has_many:through关联中为连接表中的几个新记录添加属性值

时间:2014-12-06 06:16:14

标签: ruby-on-rails ruby postgresql

我有一个表格可以创建一个新的练习,显示哪些肌肉群在工作。以下是我想要输入数据库的示例:

新练习:name => Pull-up,primary => back,secondary => [二头肌,前臂,胸部]

我该如何设置?我不想将主要和次要数据存储在muscle_groups_exercised表中作为数组,因为我将来会根据该运动的主要肌肉群搜索练习。

以下是此应用程序部分的架构:

create_table "exercises", force: true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
end

create_table "muscle_groups", force: true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
end

create_table "muscle_groups_exercised", force: true do |t|
    t.integer "muscle_group_id"
    t.integer "exercise_id"
    t.binary  "primary"
    t.binary  "secondary"
end

 add_index "muscle_groups_exercised", ["exercise_id"], name: "index_muscle_groups_exercised_on_exercise_id", using: :btree
 add_index "muscle_groups_exercised", ["muscle_group_id"], name: "index_muscle_groups_exercised_on_muscle_group_id", using: :btree

以下是模型:

class Exercise < ActiveRecord::Base
  has_many :muscle_groups, through: :muscle_groups_exercised
end

class MuscleGroup < ActiveRecord::Base
  has_many :exercises, through: :muscle_groups_exercised
end

class MuscleGroupExercised < ActiveRecord::Base
  belongs_to :exercise
  belongs_to :muscle_group
end

我有一个exercise_controller和muscle_groups_controller。我认为这段代码应该存在于exercise_controller和muscle_groups_exercised模型中,但不完全确定如何执行此操作。

2 个答案:

答案 0 :(得分:1)

你在做什么看起来对我来说。我想,即使你将在肌肉群内寻找以后的运动,也会想要将肌肉群应用于运动。我会将所需的代码放在exercises_controller.rb

Check out Ryan Bates article and video在HAMBTM复选框上获取有关如何执行此操作的一些帮助。这不完全是您正在做的事情,您需要为辅助或主要应用额外的值。

顺便说一下,我不会有两个列用于辅助和初级,因为只有两个值,只有主要的一个并假设它不是真的,那么肌肉群是次要的。

答案 1 :(得分:0)

你有更具体的问题吗?您的架构似乎适合您的要求。您可能不需要t.binary primary和t.binary secondary - 您可能只需要其中一个来指定该条目是主要还是次要。