2012-05-04 10 views
2

タイトルはちょっと変わったかもしれませんが、私に説明させてください。Rails 3 - ビューからメソッド/アクションをトリガーする方法

私は、ユーザー、コース、サブスクリプションモデルを持っています。ユーザーhas_many :courses, :through => :subscriptionとコースhas_many :users, :through => :subscription。サブスクリプションは両方に属します。その部分は、私は完全に理解しています。私はサブスクリプションモデルを使用して、ユーザーとコース間の関係の状態(完了、失敗、削除、アクティブなど)を保存しています。

私はまた、関係を作成し、このコードを持っている:今のところ @subscription = Subscription.create!(:course_id => @course.id, :user_id => current_user.id) を、私は彼らがコースビューを通じて主に管理されるので、サブスクリプションのコントローラを持っていない(しかし、私は一つの方法で設定されていませんよか別の、私はちょうどそれをやりたい)。

私が理解できないことは、コースに登録しているユーザーの行動を実装する方法と場所です。 あなたがリンクしているルートを持つCourseコントローラの別のアクションであるか、別のアクションがあるか、より良い方法ですか?私はAJAXもそれをやり遂げる一つの方法だと思っていますが、私はそれをどのように実装するか考えていません。

私はMichael Hartlのレールチュートリアルを見て、過去数日間のGoogleの検索を行い、Diasporaのソースコードを閲覧しました(私がしようとしているアクションは誰かに似ています。協会は違う)、私はそれの周りに私の頭を包むように見えることはできません。

答えて

4

まあ、私はそれを行う方法を考え出しました。

def create 
    @course = Course.find(params[:course_id]) 
    Subscription.create!(:user_id => current_user.id, :course_id => params[:course_id]) 
    redirect_to @course 
    flash[:notice] = "You're now subscribed to #{@course.name}! WooHoo!" 
end 

はその後、私が指すボタン一つで簡単なフォームを作成するために、私の見解でbutton_toヘルパーを使用することができます。私のサブスクリプションコントローラで

は、私はこのようになりcreate方法を作りました私のサブスクリプションコントローラのアクションを作成:

<%= button_to "Subscribe!", subscriptions_path(:course_id => @course.id) %>

それはroutes.rbをするための適切なアクションを追加し、もちろん、も必要です:

resources :subscriptions, :only => [:create, :update]

これは間違いなくクリーンアップすることができますが、当分の間、それがうまく動作します。

関連する問題