Как сделать так, чтобы пользователь создал таблицу has_many :through без каких-либо атрибутов пользовательского ввода?

У меня есть две модели (пользователи и курсы) и таблица 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

Таблица enrollments JOIN имеет другие атрибуты, такие как оценка, процент выполнения и т. д. Однако ни один из атрибутов не требует ввода от пользователя, кроме регистрации. В идеале я хотел бы иметь ссылку new_course_enrollment(@course, {:user_id => current_user} ), которая создает регистрацию в фоновом режиме (пользователю не нужно ничего вводить) и перенаправляет обратно на страницу курсов с заменой ссылки «зачисление» статусом «зачислен». Есть ли способ сделать это в моделях без необходимости изменять действие по умолчанию RESTful Enrollments#new контроллера?


person Community    schedule 25.11.2008    source источник


Ответы (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.

person allesklar    schedule 25.11.2008