0

Ruby on Railsを使用してデータベースに配列値を保存するにはどうすればよいですか? 私は 1 日 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

どんな助けでも大歓迎です私はプレッシャーにさらされており、これはちょっと恥ずかしいと感じています.

どうもありがとう

4

1 に答える 1

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

さらに、「期間番号」と「曜日番号」をsubjectsテーブルに保存できると思いますので、科目テーブルでコースの時間を知ることができます。コースの時間が固定されていない場合 (同じ ID の科目でコース時間が異なる場合)、これら 2 つの属性を に格納するstudentshipことをお勧めします。そうすることで不要な tabletimetablesが不要になります。

ユーザーが受講した科目を保存したい場合は、配列に従って新しい学生を繰り返し作成するだけです。

最後に、次のことができます。

user = User.frist
subject = Subject.first
user.subjects  # subjects taken by the first user
subject.users  # users who take the first subject
于 2013-01-11T10:28:32.070 に答える