Rails имеет_и_подлинное_ множество_сообщений - PullRequest
0 голосов
/ 14 апреля 2011

поэтому у меня две модели:

class User < ActiveRecord::Base
  has_and_belongs_to_many :followed_courses,  :class_name => "Course"
end

class Course < ActiveRecord::Base
  has_and_belongs_to_many :followers, :class_name => "User"
end

в User.rb, у меня также есть:

  def following_course?(course)
    followed_courses.include?(course)
  end

  def follow_course!(course)
    followed_courses<<course
  end

  def unfollow_course!(course)
    followed_courses.delete(course)
  end

У меня нет модели курсы_пользователей, только таблица соединений (курсы_пользователей). Я думаю, мне придется следовать / отменить курс в CoursesController. Создать новое действие в контроллере?

Прямо сейчас, у меня есть форма для подписки на странице курсов / шоу, когда курс не отслеживается

= form_for @course, :url => { :action => "follow" }, :remote => true do |f|
  %div= f.hidden_field :id
  .actions= f.submit "Follow"

А у меня в CoursesController:

  def follow
    @course = Course.find(params[:id])
    current_user.follow_course!(@course)
    respond_to do |format|
      format.html { redirect_to @course }
      format.js
    end
  end

Но похоже, что он никогда не был активирован. Нужно ли изменить маршрут, чтобы действие было активировано? Как это изменить? Или есть лучший способ сделать это? Могу ли я заменить форму просто ссылкой? Заранее спасибо! Это продолжение связанного вопроса Реализация полиморфной модели рельсов

1 Ответ

1 голос
/ 14 апреля 2011

Система маршрутизации вызывает CoursesController#follow? Если нет, то в файле routes.rb необходимо написать следующую строку:

map.resources :courses, :member => {:follow => :post} 
#You'll have the map.resources :courses, just add the second argument.

После этого система маршрутизации может перенаправить на это действие, и вы получите follow_course_url(@course) помощник

...