如何让用户创建一个没有任何用户输入属性的has_many:through表?

时间:2008-11-25 18:09:57

标签: ruby-on-rails has-many-through has-many

我有两个模型(用户和课程)和一个允许在课程中注册的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} )链接在后台创建注册(无需用户输入任何内容)并重定向回课程页面,“注册”链接替换为“已注册” “ 状态。有没有办法在模型中执行此操作,而无需更改默认的RESTful Enrollments#new controller action?

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。

在视图中,您可以使用“立即注册”锚文本创建内联表单,指向您的“new_course_enrollment”方法。

表单应该有一个带有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

您当然可以重构此代码以缩短代码,将其移动到控制器中的私有方法,或者更合乎逻辑地移动到Enrollment模型本身。