0
所以我有兩個型號:Rails的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
在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
我沒有courses_users模型,只是一個連接表(courses_users )。我想我必須遵循/取消關注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
不過貌似這是從來沒有活性。我是否需要修改路線以便動作被激活?如何修改它?還是有更好的方法來做到這一點?我可以用鏈接替換表單嗎?提前致謝! 這是後續的相關問題rails polymorphic model implementation
通常你應該使用'PUT '請求,如果你要創建一個新的記錄。 就我個人而言,我會創建一個連接模型並使用':has_many:through =>'。這可能看起來像更多的工作,但它會坐在更舒適的Rails REST約定。 – 2011-04-14 15:59:09
謝謝。我使用的是rails3,所以我使用'resources:courses do post'toggle',:on =>:member end'然而,它仍然不起作用,控制檯說:'ActionController :: RoutingError(沒有路由匹配「/ courses/3/toggle」):' – randomor 2011-04-14 17:10:40
看起來像現在正在工作。該操作在控制器中被過濾。 :) 謝謝。 – randomor 2011-04-14 17:16:46