Ruby on rails Rails 3.0:PUT成员路由上没有路由错误
我有一个Rails 3.0应用程序,它的特点是有一个简单的投票机制,可以在投票失败的票数上增加一个计数。我在routes.rb中设置了一个PUT路由,并在控制器中创建了一个方法来处理它。“向下投票”链接本身会正确渲染,但单击该链接会出现路由错误No route matches“/Vinces/18/down_vote”错误 这是我的控制器代码:Ruby on rails Rails 3.0:PUT成员路由上没有路由错误,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有一个Rails 3.0应用程序,它的特点是有一个简单的投票机制,可以在投票失败的票数上增加一个计数。我在routes.rb中设置了一个PUT路由,并在控制器中创建了一个方法来处理它。“向下投票”链接本身会正确渲染,但单击该链接会出现路由错误No route matches“/Vinces/18/down_vote”错误 这是我的控制器代码: def down_vote @venue = Venue.find(params[:id]) respond_to do |format|
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
这是我的下行投票路线代码:
resources :venues do
put 'down_vote', :on => :member
end
查看代码(位于场馆列表的分部中):
:put%>
同样,视图本身渲染良好,链接渲染如预期:
<a href="/venues/15/down_vote" data-method="put" rel="nofollow">Incorrect?</a>
有什么想法吗?听起来你的javascript有问题。您是否包括正确的文件?你的布局是什么样子的?你说得对。我误读了API。可能是把这个问题和别的事情混在一起了。很抱歉:)您能在应用程序日志中确认服务器确实收到PUT请求吗?不用担心。:)现在我看了一下日志,似乎它实际上是出于某种原因执行GET请求的:在2011-11-28 01:01:41-0500,开始GET“/VICEONES/18/down_VOUT”为127.0.0.1投票。奇怪的是,由于data method属性是按预期的形式形成的,所以它会执行put请求。我仍然会切换到使用按钮,因为链接应该
获取
资源,并且可以右键单击并在新的选项卡/窗口中打开。这一点很好;我切换到它的一个按钮,所以现在它是这样的:down_vote_vention_path(venture),:method=>:put%>现在这个页面将不会呈现,我得到了这样的结果:没有路由匹配{:action=>“/vinces/17/down_vote”,:method=>:put,:controller=>“vences”}看起来我的原始代码正在运行,唯一的变化是,它不是在控制器中调用update\u属性
,而是在场馆模型中调用一个方法,该方法增加模型实例中的否决票,并执行简单的保存代码>调用。除了我添加的Mapstraction和Google Maps API之外,这是Rails在布局中包含的内容:看起来我的jQuery版本是1.5,而在投票示例中没有包含jQuery_ujs.js文件:,它使用1.7。我安装的jquery rails gem似乎在rails.js中放了很多东西来处理它。我将尝试更新gem…我使用了jquery rails它更改了包含在=javascript\u include\u tag:defaults
中的脚本列表,以便jquery、jquery ui(如果使用)和jquery ujs脚本都作为一个附件加载,所有这些在rails 3.1中都要容易得多,其中jquery是默认的.Hrmm。。。为gem版本指定1.0.18并运行Bundler更新似乎并没有添加ujs或更改项目中的任何js文件。我想我可以试着复制vote_示例中的js文件,现在至少安装了gem的正确版本。如果做不到这一点,可能会勇敢地升级到Rails 3.1。看起来运行Rails g jquery install
帮助升级jquery并安装了ujs文件。我还必须更改config/application.rb以将:defaults符号指向大于零的值:\config.action\u view.javascript\u扩展[:defaults]=%w(jquery rails)
。删除了手动jquery脚本标记,并使用
将其全部同步。留下这些步骤,以防将来有人访问此页面。现在来解决我原来的问题。。。
<a href="/venues/15/down_vote" data-method="put" rel="nofollow">Incorrect?</a>