2012-05-04 45 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) 截至目前,我沒有訂閱控制器,因爲它們將主要通過管理過程中的意見(但我不是這種或那種方式設置另一個,我只想做正確的)。

我不明白的是如何/在哪裏實現訂閱課程的用戶的行爲。 它應該是課程控制器中的一個單獨的動作,並且您鏈接到另一個路徑,或者有另一個路徑,那麼更好的方法是做什麼?我想AJAX會是這樣做的一種方式,但我不知道如何實現它。

我已經瀏覽了Michael Hartl的rails教程,在過去的幾天裏做了一些谷歌搜索,甚至瀏覽了Diaspora的源代碼(因爲我試圖做的動作類似於和某人交朋友,儘管協會是不同的),但我似乎無法繞過它。

回答

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幫助創建一個簡單的形式,一個按鈕指向我的訂閱控制器上創建行動:

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

這也是必要的,當然,添加適當的行動,以routes.rb中:

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

它絕對可以清理,但暫時,它很好地工作。

相關問題