[英]How do you use a Rails 3 gem method to update a database model?
我正在使用Thumb_Up寶石在軌道上使用紅寶石。 https://github.com/brady8/thumbs_up
我希望用戶能夠對帖子進行投票。 但是,我無法弄清楚如何允許用戶單擊每個帖子旁邊的按鈕並向數據庫添加投票。
通過執行以下操作,我可以在rails控制台中完成此操作:
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”}
有誰知道為什么路由不正確?
我假設使用Rails3。Rails2的路線看起來有些不同。
首先,您需要在config / routes.rb文件中定義一條路由。 您可以通過多種方式執行此操作。 如果您已經有微博的路線,則只需添加一個“投票”操作即可:
resources :microposts do
post :vote, :on => :member
end
(為清楚起見,上面的“ post”是指HTTP POST方法,與Micropost類無關。)如果使用該路由,則需要在Microposts控制器中創建一個“ vote”方法來捕獲它。 。 就像是
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)
看起來像/ microposts / 56 / vote
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.