如何在rails上的ruby上保存包含id值的数组

时间:2013-01-11 06:04:52

标签: arrays hash time model ruby-on-rails-3.2

如何使用ruby on rails在数据库中存储数组值?我正在建立一个每天有6个学期的学校时间表。我将主题ID存储到数组中,但我不知道如何保存该数组的id值。

我的控制器:

def create
  @timetable = Timetable.new(params[:timetable])

    @buildtimetable = params[:gradeclassroomsubject_id]
      @buildtimetable.each do |subjectID|
        subjectID.save!(params[:gradeclassroomsubject_id].reject { |k,v| v.blank? })
      end
end

class CreateTimetables < ActiveRecord::Migration
  def change
    create_table :timetables do |t|
      t.integer :period_no
      t.integer :day_no
      t.integer :gradeclassroomsubject_id
      t.integer :user_id

      t.timestamps
    end
  end
end

任何帮助都非常感谢我在压力之下,这有点令人尴尬。

非常感谢

1 个答案:

答案 0 :(得分:0)

简短回答:无法将许多值(数组中的所有值)存储到表的列中。

由于您只想存储subject_id,我想您已经有一个存储所有主题的表格,您唯一想做的就是设置特定用户与他/她所拍摄主题之间的关系。您需要many-to-many关系。

创建一个新表:

class CreateStuendship < ActiveRecord::Migration
  def change
    create_table :stuedentships do |t|
      t.integer :subject_id
      t.integer :user_id
      # something else you want to store about this relationship, ex: year, semester...
    end
  end

应用程序/模型/助学金:

class Studentship < ActiveRecord::Base
  belong_to :user
  belong_to :subject
end

应用程序/模型/ user.rb:

class User < ActiveRecord::Base
  has_many :studentship
  has_many :subjects, :through => :studentship
end

应用程序/模型/ subject.rb中:

class Subject < ActiveRecord::Base
  has_many :studentship
  has_many :users, :through => :studentship
end

此外,我认为您可以将“period_no”和“day_no”存储到subjects表中,这样您就可以通过主题表知道课程的时间。如果课程的时间不固定(具有相同身份的科目具有不同的课程时间),将这两个属性存储到studentship可能是个好主意。通过这样做,您不再需要表timetables,这是不必要的。

当您想要存储用户拍摄的主题时,只需根据您的数组迭代创建新的学生。

最后,你可以

user = User.frist
subject = Subject.first
user.subjects  # subjects taken by the first user
subject.users  # users who take the first subject