Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3.0:PUT成员路由上没有路由错误_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Rails 3.0:PUT成员路由上没有路由错误

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|

我有一个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|
    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>