0

だから私は2つのモデルを持っています:

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

しかし、それは決して活性化されなかったようです。アクションが有効になるようにルートを変更する必要がありますか? それを変更する方法は?または、これを行うより良い方法はありますか?フォームをリンクだけに置き換えることはできますか? 前もって感謝します!これは、関連するクエスチョンレール ポリモーフィック モデルの実装のフォローアップです。

4

1 に答える 1

1

ルーティング システムは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)ヘルパーを提供します

于 2011-04-14T15:55:51.067 に答える