J'ai donc deux modèles:Rails association de l'has_and_belongs_to_many
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
dans User.rb, j'ai aussi:
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
Je n'ai pas un modèle courses_users, juste une table de jointure (courses_users). Je suppose que je devrais suivre/unfollow un cours dans CoursesController. Est-ce que je crée une nouvelle action dans le contrôleur?
En ce moment, j'ai une forme de suivre les cours/page show lorsque le cours n'est pas suivi
= form_for @course, :url => { :action => "follow" }, :remote => true do |f|
%div= f.hidden_field :id
.actions= f.submit "Follow"
Et je en 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
Mais semble que cela n'a jamais été activé Dois-je modifier l'itinéraire pour que l'action soit activée? Comment le modifier? Ou y a-t-il une meilleure façon de faire cela? Puis-je remplacer le formulaire par un simple lien? Merci d'avance! Ceci est une suite d'une question connexe rails polymorphic model implementation
En général, vous devez utiliser 'PUT 'demande si vous allez créer un nouvel enregistrement. Personnellement, je voudrais créer un modèle de jointure et utiliser ': has_many: through =>'. Cela peut sembler plus de travail, mais il sera assis plus confortablement avec les conventions de Rails REST. –
merci. J'utilise rails3, donc j'ai utilisé 'resources: les cours font post 'toggle',: on =>: membre end' cependant, ça ne marche toujours pas, la console dit:' ActionController :: RoutingError (No route matches "/ courses/3/toggle"): ' – randomor
semble que ça marche maintenant. L'action a été filtrée dans le contrôleur. :) Merci. – randomor