【问题标题】:Routing error (GET instead of POST) with Vote_fu/Thumbs_up gem使用 Vote_fu/Thumbs_up gem 的路由错误(GET 而不是 POST)
【发布时间】:2011-12-09 07:03:41
【问题描述】:

我正在尝试使用 vote_fu gem,我遇到了其他人也有的问题,但我无法用其他人的解决方案解决这个问题..

我认为问题与 gem 没有直接关系.. 而是与某些错误的路线或缺少参数..

我有一个包含act_as_voteable 的消息模型。 对于用户模型,我添加了act_as_voter

在我添加的 Msg 控制器中

def votefor
    @msg= Msg.find(params[:id])
    current_user.vote_for(@msg)
    redirect_to :back
end

在路线中:

 resources :msgs do
        member do
            post :votefor
        end
    end

我在 Msg 的节目中添加了

<%= link_to "Vote Up", votefor_msg_path(@msg), :method => :post %>

但是当我点击创建的链接时,我得到了

Routing Error

No route matches [GET] "/msgs/1/votefor"

为什么它是“GET”而不是“POST”?我错过了什么?

【问题讨论】:

  • 如果我使用 Button_to 一切正常,但使用 link_to 没有意义..

标签: ruby-on-rails-3 routes


【解决方案1】:

我认为现在回答这个问题已经很晚了,我主要认为你一定已经弄清楚了……我遇到了同样的问题,我明白了原因……

这是来自routes.rb的示例评论

  # Sample resource route with options:
  #   resources :products do
  #     member do
  #       get 'short'
  #       post 'toggle'
  #     end

这里的post 'toggle'不是后置控制器而是:method =&gt; 'post'

link_to 默认使用:method =&gt; 'get',但您可以使用:method =&gt; 'post' 覆盖它

如果你使用link_to .. 在示例中没有:method =&gt; 'post'

你的路由应该是

resources :msgs do
   member do
   get :votefor
   end
end

希望这会有所帮助!

更新:

对于您的疑问:

link_to 带有 :method => :post

使用这个

<%= link_to "Vote Up", votefor_msg_path(@msg), :method => :post %>

在路线中应该是

resources :msgs do
       member do
       post :votefor
       end
end

帖子 :votefor .. 是 :method => :post 不是帖子控制器。

检查brady8's answer

【讨论】:

  • 不太明白。如何将 link_to 用于 POST 而不是 GET?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
  • 1970-01-01
  • 2011-08-04
  • 2010-09-07
相关资源
最近更新 更多