2

ちょっと変なタイトルかもしれませんが説明させてください。

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

リレーションシップを作成するこのコードもあります。 @subscription = Subscription.create!(:course_id => @course.id, :user_id => current_user.id) サブスクリプション コントローラーは主にコース ビューを介して管理されるため、現時点ではありません (ただし、何らかの方法で設定されているわけではありません。やりたいだけです)。それは正しい)。

私が理解していないのは、コースにサブスクライブしているユーザーのアクションを実装する方法/場所です。リンク先のルートを持つ Course コントローラーで別のアクションにする必要がありますか、それとも別のより良い方法がありますか? AJAXもそれを行う1つの方法になると思いますが、それを実装する方法がわかりません。

私は Michael Hartl の rails チュートリアルに目を通し、過去 2 日間にわたって Google 検索を行い、Diaspora のソース コードを閲覧しました (関連性は異なりますが、私が行おうとしているアクションは誰かと友達になることに似ているため)。 、しかし、頭を包むことができないようです。

4

1 に答える 1

4

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

サブスクリプション コントローラーで、次のcreateようなメソッドを作成しました。

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、ビューでヘルパーを使用して、サブスクリプション コントローラーの作成アクションを指す 1 つのボタンを持つ単純なフォームを作成できます。

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

もちろん、routes.rb に適切なアクションを追加することも必要です。

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

間違いなくクリーンアップできますが、当分の間、うまく機能します。

于 2012-05-08T21:53:07.920 に答える