2011-04-11 61 views
0

我在軌道上使用Ruby_的Thumb_Up寶石。 https://github.com/brady8/thumbs_up如何使用Rails 3 gem方法更新數據庫模型?

我希望用戶能夠對帖子投票。 但是,我無法弄清楚我如何允許用戶單擊每個帖子旁邊的按鈕並向數據庫添加投票。

我能得到這個在軌控制檯上執行,通過執行以下操作:

u=User.first 

m=Micropost.first 

u.vote_for(m) 

但是,我怎麼能得到當單擊視圖按鈕,這樣的事情發生。我假設我將不得不使用ajax,但是如何知道我需要發佈的url以使此操作發生?

任何幫助將不勝感激。

更新:

感謝這麼多的幫助!我仍然遇到下面的代碼有問題。

這裏是我的routes.rb

resources :microposts do 
    post :vote, :on => :member 
end 

查看:

<%= link_to('vote for this post!', vote_micropost_path(@micropost), :method => :post) %> 

控制器:

def vote 
    @micropost = Micropost.find(params[:id]) 
    current_user.vote_for @micropost 

    # This assumes you'll only call it via AJAX. 
    # If your ajax call doesn't return "ok", then you know something went wrong 
    render :text => 'ok', :layout => false 
end 

不過,我還是收到此錯誤: 沒有路由匹配{ :controller =>「microposts」,:id =>#,:action =>「vote」}

會有人知道爲什麼路線不正確匹配?

+0

是的,這是更清晰一點。它看起來像在您的視圖中,@micropost實際上並未設置爲Micropost記錄。不管渲染視圖需要設置@micropost的操作,就像_vote_操作正在做的一樣。 – bioneuralnet 2011-04-14 15:33:59

回答

1

我假設Rails 3. Rails 2的路線看起來有點不同。

首先,您需要在config/routes.rb文件中定義路由。你可以用很多方法做到這一點。如果您已經有微觀柱的路線,你可以簡單地添加一個「投票」行動:

resources :microposts do 
     post :vote, :on => :member 
    end 

(爲了清楚起見,「後」以上爲HTTP POST方法,並沒有任何與你的微柱類)如果您使用該路線,則需要在您的Microposts控制器中創建一個「投票」方法來捕捉它。像

def vote 
     @post = Micropost.find(params[:id]) 
     current_user.vote_for @post 

     # This assumes you'll only call it via AJAX. 
     # If your ajax call doesn't return "ok", then you know something went wrong 
     render :text => 'ok', :layout => false 
    end 

然後在您的視圖的AJAX POST調用的東西(假設我給的例子路線),你會得到與網址:

vote_micropost_path(@micropost) 

它看起來像/微柱/ 56 /票

+0

我在我的視圖中使用link_to:** bold ** <%= link_to('爲此帖子投票!',vote_micropost_path(@micropost),:method =>:post)%> ** bold **。我一直得到這個錯誤沒有路由匹配{:controller =>「microposts」,:id =>#,:action =>「vote」}這是我用於我的路線的資源:resources:microposts,:only => [:create,:destroy] do \t post:vote,:on =>:會員 end非常感謝您的幫助。 – chris 2011-04-12 15:22:04

+0

你的路線看起來不錯。我假設@micropost設置爲你想投票的Micropost對象?因爲它看起來像是一個全新的Micropost對象,實際上並不在數據庫中。 – bioneuralnet 2011-04-12 15:38:26

+0

我在控制器中使用它來獲得當前的微博。 @micropost = Micropost.find(params [:id])我需要以某種方式傳遞被點擊的人的ID嗎?你怎麼可以去做這樣的事情,或者有一個更簡單的伎倆。 – chris 2011-04-12 15:46:13

相關問題