我有两个模型(用户和课程)和一个允许在课程中注册的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?
答案 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模型本身。