0

2つのモデル(ユーザーとコース)と、コースへの登録を可能にするJOINテーブルがあります。

class User < ActiveRecord::Base
 has_many :enrollments, :dependent => :destroy
 has_many :courses,     :through => :enrollments
end

class Course < ActiveRecord::Base
 has_many :enrollments, :dependent => :destroy
 has_many :users,       :through => :enrollments
end

class Enrollment < ActiveRecord::Base
  belongs_to :user
  belongs_to :course
end

登録JOINテーブルには、成績、完了率などの他の属性があります。ただし、登録以外の属性には、ユーザーからの入力は必要ありません。理想的にはnew_course_enrollment(@course, {:user_id => current_user} )、バックグラウンドで登録を作成し(ユーザーが何も入力する必要がない)、「登録」リンクを「登録済み」ステータスに置き換えてコースページにリダイレクトするリンクが必要です。デフォルトのRESTfulEnrollments#newコントローラーアクションを変更せずに、モデルでこれを行う方法はありますか?

4

1 に答える 1

1

これを行うにはいくつかの方法があります。

ビューでは、'new_course_enrollment' メソッドを指す、'enroll now' アンカー テキストを含むインライン フォームを作成できます。

フォームには、course_id の非表示フィールドが必要です。

次に、コントローラーでこのコードが必要です。

def new_course_enrollment
  e = Enrollement.new
  e.user_id = current_user
  e.course_id = params[:course_id]
  e.save

  redirect_to :action => 'index' # list of courses here
end

もちろん、このコードをリファクタリングして短くしたり、コントローラーのプライベート メソッドに移動したり、より論理的には登録モデル自体に移動したりできます。

于 2008-11-25T20:45:58.040 に答える