Как заставить пользователя создать таблицу has_many: through без каких-либо атрибутов ввода пользователя? - PullRequest
0 голосов
/ 25 ноября 2008

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

1 Ответ

1 голос
/ 25 ноября 2008

Есть несколько способов сделать это.

В представлении вы можете создать встроенную форму с якорным текстом 'enroll now', указывающим на ваш метод '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

Конечно, вы можете изменить этот код, чтобы сделать его короче, переместить его в приватный метод контроллера или, что более логично, в саму модель регистрации.

...