2011-04-11 62 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

相关问题