【发布时间】:2011-11-28 05:19:24
【问题描述】:
我有一个 Rails 3.0 应用程序,它具有一个简单的投票机制,可以为反对票的数量添加计数。我在 routes.rb 中设置了一个 PUT 路由,并在我的控制器中创建了一个方法来处理它。否决票链接本身可以正确呈现,但单击它会给我一个路由错误 No route matches "/venues/18/down_vote" 错误。
这是我的控制器代码:
def down_vote
@venue = Venue.find(params[:id])
respond_to do |format|
if @venue.update_attribute(:mon_closed_accuracy_downvotes => @venue.mon_closed_accuracy_downvotes + 1)
format.html { redirect_to(:back, :flash => { :success => "Shenanigans were successfully called on #{ @venue.name }'s closing time." }) }
format.xml { head :ok }
else
format.html { render :action => 'show' }
format.xml { render :xml => @venue.errors, :status => :unprocessable_entity }
end
end
end
这是我的 down_vote 路线的路线代码:
resources :venues do
put 'down_vote', :on => :member
end
查看代码(在部分场地列表中):
<%= link_to 'Incorrect?', down_vote_venue_path(venue), :method => :put %>
同样,视图本身渲染良好,链接按预期渲染:
<a href="/venues/15/down_vote" data-method="put" rel="nofollow">Incorrect?</a>
有什么想法吗?
【问题讨论】:
-
你是对的。我误读了 API。可能将问题与其他问题混为一谈。很抱歉 :) 你能在应用日志中确认服务器确实收到了 PUT 请求吗?
-
不用担心。 :) 现在我正在查看日志,看来它实际上出于某种原因在执行 GET 请求:Started GET "/venues/18/down_vote" for 127.0.0.1 at 2011-11-28 01:01:41 - 0500。奇怪的是,由于 data-method 属性按预期形成,因此它会执行 put 请求。
-
我仍然会切换到使用按钮,因为链接应该指向
GET资源,并且可以右键单击并在新选项卡/窗口中打开。 -
好点;我切换到它一个按钮,所以现在它是: down_vote_venue_path(venue), :method => :put %> 现在页面不会呈现,我明白了: 没有路线匹配 {:action=>"/venues/17/down_vote", :method=>:put, :controller=>"venues"}
-
看起来我的原始代码现在可以工作了,唯一的变化是它不是在控制器中调用
update_attribute,而是在场地模型中调用一个方法,这会增加模型实例中的否决票并打一个普通的save!电话。
标签: ruby-on-rails ruby-on-rails-3