我已经被困在rails问题上几天了,还没有找到解决方案。我的代码曾经工作过,但是javascript有一些重大的更改(需要),并且它不再工作了。
我的用户可以参加和退出一个活动。这需要用户按一下按钮,然后发送一个post请求,但由于某种原因,请求被处理为Get请求,并由于没有get请求的路由而失败(需要post)。
查看:
<% if @competition.users.exclude?(@user) %>
<%= link_to 'Attend Competition', attend_competition_path(@competition.id), :method => :post %>
<% else %>
<%= link_to 'Withdraw', withdraw_competition_path(@competition.id), :method => :post %>application.js
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap
//= require_tree .application.html.erb
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<%= csrf_meta_tags %>routes.rb
resources :competitions do
post 'attend', on: :member
end
resources :competitions do
member do
post 'withdraw'
end
end主计长:
def attend
@competition = Competition.find(params[:id])
if @competition.users.include?(current_user)
flash[:error] = "You're already attending this competition."
elsif current_user.daily == []
flash[:error] = "You must have a working device to compete."
else
current_user.competitions << @competition
flash[:success] = "Attending competition!"
end
redirect_to @competition
end
def withdraw
p "WITHDRAWING"
@competition = Competition.find(params[:id])
p @competition
attendee = Attendee.find_by_user_id_and_competition_id(current_user.id, @competition.id)
if attendee.blank?
flash[:error] = "No current attendees"
else
attendee.delete
flash[:success] = 'You are no longer attending this competition.'
end
p attendee
redirect_to @competition
end实际错误:
ActionController::RoutingError (No route matches [GET] "/competitions/9/withdraw"):谢谢
**额外**
完全show.view
<p id="notice"><%= notice %></p>
<p>
<%= @competition.title %>
</p>
<p>
<b>Length:</b>
<%= @competition.length %>
</p>
<b>Start:</b>
<%= @competition.start.strftime("%d %m %Y") %>
</p>
<b>End:</b>
<%= @competition.end.strftime("%d %m %Y") %>
</p>
<p><strong>Attendees: </strong>
<% if @competition.users.exclude?(@user) %>
<%= link_to 'Attend Competition', attend_competition_path(@competition.id), :method => :post %>
<% else %>
<%= link_to 'Withdraw', withdraw_competition_path(@competition.id), :method => :post %>
<% end %>
</p>
<% a = 1 %>
<% for attendee in @competition.users %>
<p2><strong><%= a %> </strong><%= link_to attendee.name, attendee %></p2>
<% if attendee.daily != [] %>
<p><%= attendee.daily.first(7).sum %></p>
<% end %>
<% a = a + 1 %>
<% end %>
</br>
<%= link_to 'Edit', edit_competition_path(@competition) %> |
<%= link_to 'Back', competitions_path %>Rails的HTML输出
<a href="/competitions/4/withdraw" data-method="post" rel="nofollow">Withdraw</a>** MOAR **
日志中的完整错误
ActionController::RoutingError (No route matches [GET] "/competitions/6/withdraw"):
actionpack (3.2.3) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (3.2.3) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
railties (3.2.3) lib/rails/rack/logger.rb:26:in `call_app'
railties (3.2.3) lib/rails/rack/logger.rb:16:in `call'
actionpack (3.2.3) lib/action_dispatch/middleware/request_id.rb:22:in `call'
rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
rack (1.4.5) lib/rack/runtime.rb:17:in `call'
activesupport (3.2.3) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.4.5) lib/rack/lock.rb:15:in `call'
actionpack (3.2.3) lib/action_dispatch/middleware/static.rb:62:in `call'
railties (3.2.3) lib/rails/engine.rb:479:in `call'
railties (3.2.3) lib/rails/application.rb:220:in `call'
rack (1.4.5) lib/rack/content_length.rb:14:in `call'
railties (3.2.3) lib/rails/rack/log_tailer.rb:14:in `call'
rack (1.4.5) lib/rack/handler/webrick.rb:59:in `service'
/Users/Marcus/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/Users/Marcus/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/Users/Marcus/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
Rendered /Users/Marcus/.rvm/gems/ruby-1.9.3-p448@rails3tutorial2ndEd/gems/actionpack-3.2.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.5ms)来自浏览器的HTML:
<a href="/competitions/3/withdraw" data-method="post" rel="nofollow">Withdraw</a>整页可能很长
<html><head>
<title>BOTB</title>
<link data-turbolinks-track="true" href="/assets/application.css" media="all" rel="stylesheet" type="text/css">
<script data-turbolinks-track="true" src="/assets/application.js" type="text/javascript"> </script><style type="text/css"></style>
<meta content="authenticity_token" name="csrf-param">
<meta content="Cl7ar8gwVcRsJzrKjp92KB6p6PihvVu0jAwngi18dWU=" name="csrf-token">
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style id="clearly_highlighting_css" type="text/css">/* selection */ html.clearly_highlighting_enabled ::-moz-selection { background: rgba(246, 238, 150, 0.99); } html.clearly_highlighting_enabled ::selection { background: rgba(246, 238, 150, 0.99); } /* cursor */ html.clearly_highlighting_enabled { /* cursor and hot-spot position -- requires a default cursor, after the URL one */ cursor: url("chrome-extension://pioclpoplcdbaefihamjohnefbikjilc/clearly/images/highlight--cursor.png") 14 16, text; } /* highlight tag */ em.clearly_highlight_element { font-style: inherit !important; font-weight: inherit !important; background-image: url("chrome-extension://pioclpoplcdbaefihamjohnefbikjilc/clearly/images/highlight--yellow.png"); background-repeat: repeat-x; background-position: top left; background-size: 100% 100%; } /* the delete-buttons are positioned relative to this */ em.clearly_highlight_element.clearly_highlight_first { position: relative; } /* delete buttons */ em.clearly_highlight_element a.clearly_highlight_delete_element { display: none; cursor: pointer; padding: 0; margin: 0; line-height: 0; position: absolute; width: 34px; height: 34px; left: -17px; top: -17px; background-image: url("chrome-extension://pioclpoplcdbaefihamjohnefbikjilc/clearly/images/highlight--delete-sprite.png"); background-repeat: no-repeat; background-position: 0px 0px; } em.clearly_highlight_element a.clearly_highlight_delete_element:hover { background-position: -34px 0px; } /* retina */ @media (min--moz-device-pixel-ratio: 2), (-webkit-min-device-pixel-ratio: 2), (min-device-pixel-ratio: 2) { em.clearly_highlight_element { background-image: url("chrome-extension://pioclpoplcdbaefihamjohnefbikjilc/clearly/images/highlight--yellow@2x.png"); } em.clearly_highlight_element a.clearly_highlight_delete_element { background-image: url("chrome-extension://pioclpoplcdbaefihamjohnefbikjilc/clearly/images/highlight--delete-sprite@2x.png"); background-size: 68px 34px; } } </style><style>[touch-action="none"]{ -ms-touch-action: none; touch-action: none; }[touch-action="pan-x"]{ -ms-touch-action: pan-x; touch-action: pan-x; }[touch-action="pan-y"]{ -ms-touch-action: pan-y; touch-action: pan-y; }[touch-action="scroll"],[touch-action="pan-x pan-y"],[touch-action="pan-y pan-x"]{ -ms-touch-action: pan-x pan-y; touch-action: pan-x pan-y; }</style></head>
<body style="">
<header class="navbar navbar-fixed-top navbar-inverse">
<div class="navbar-inner">
<div class="container">
<a href="/" id="logo">Battle Of The Bands</a>
<nav>
<ul class="nav pull-right navbar-nav " id="menu">
<li><a href="/">Home</a></li>
<li><a href="/competitions">Competition</a></li>
<li><a href="/users">Users</a></li>
<li id="fat-menu" class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
Account <b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="/users/1">Profile</a></li>
<li><a href="/devices">Connect Device</a></li>
<li><a href="/competitions/new">Create Competition</a></li>
<li><a href="/users/1/edit">Settings</a></li>
<li class="divider"></li>
<li>
<a href="/signout" data-method="delete" rel="nofollow">Sign out</a>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</div>
</header>
<div class="container">
<p id="notice"></p>
<p>
Tester March 8
</p>
<p>
<b>Length:</b>
5
</p>
<b>Start:</b>
03 03 2014
<p></p>
<b>End:</b>
03 03 2014
<p></p>
<p><strong>Attendees: </strong>
<a href="/competitions/3/withdraw" data-method="post" rel="nofollow">Withdraw</a>
</p>
<p2><strong>1 </strong><a href="/users/1">Marcus Smith</a></p2>
<p>49774</p>
<br>
<a href="/competitions/3/edit">Edit</a> |
<a href="/competitions">Back</a>
<footer class="footer">
<small>
by <a href="http://www.twitter.com/_mhsmith_"> Marcus Smith</a>
</small>
<nav>
<ul>
<li><a href="/about">About</a></li>
</ul>
</nav>
</footer>
<!-- <pre class='debug_dump'>--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
action: show
controller: competitions
id: '3'
</pre> -->
</div>
</body></html>发布于 2014-03-04 04:41:31
我怀疑这是因为您没有包含jquery_ujs.js。
// application.js
//
//= require jquery
//= require jquery_ujs在您的application.js清单中,您应该包括jquery_ujs --它不是将GET请求转换为POST的不引人注目的javascript代码,因为标记中有data-method字段。
如果您的do包含了jquery_ujs.js,那么M就可能是7 before关于javascript错误的评论--如果您有任何在执行jquery_ujs.js之前引发的javascript错误,它将无法解释您的链接。
发布于 2015-03-27 14:30:29
我不知道是否有人会看到这一点,因为问题被问了很长时间了,但我遇到了同样的问题,所以如果有人在寻找答案,而jquery不是问题所在,下面是最后为我解决的问题--反复检查您的代码,确保您的没有:
$(document).unbind('click')...
你代码里的任何地方。这会导致所需的javascript将GET请求转换为POST或DELETE请求而不运行。希望能帮助我解决这个困扰我很长时间的问题。
https://stackoverflow.com/questions/22161132
复制相似问题