我有一些简单的操作,我想通过js调用它们,但是得到了奇怪的错误,下面是我的代码:
主计长:
class Admin::CEventsController < Admin::BaseController
def add_speaker
# speakers = session[:speakers] ? [] : session[:speakers]
# speakers << Partner.find(params[:id])
# session[:speakers] << speakers.uniq
# @speakers = Partner.find(session[:speakers])
# puts @speakers.inspect
end
def remove_speaker
# speakers = session[:speakers]
# speakers.destroy(params[:id])
# session[:speakers] = speakers
# @speakers = Partner.find(session[:speakers])
end
end路线:
resources :c_events, :except => [:show] do
member do
post :add_speaker
post :remove_speaker
end
end查看:
<div class="row">
<div class="small-6 columns">
<% speakers.each do |p| %>
<p><%= link_to p.name remove_speaker_admin_c_event_path(p), :method => :post, :remote => true %></p>
<% end %>
</div>
<div class="small-6 columns">
<% Partner.all.each do |p| %>
<p><%= link_to p.name, add_speaker_admin_c_event_path(p), :method => :post, :remote => true %></p>
<% end %>
</div>
</div>我注释了一些操作代码,只是为了找出问题。我得到的错误是:
开始发布“/admin/c_events/2/add_扬声器”,用于127.0.0.1在2014-01-06 21:38:25 +0200由Admin::CEventsController#add_speaker作为JS参数处理:{"id"=>"2"} CEvent Load (0.1ms)从"c_events“选择"c_events".*,其中”c_events“。”id“=?极限1 ["id","2"]完成404在12 id中找不到 ActiveRecord::RecordNotFound (无法找到CEvent和id=2):
似乎调用了另一个操作,此控制器中的另一个操作是标准的CRUD rails访问。
发布于 2014-01-06 20:58:07
这是一个部分的答案,因为我不知道如何精确地解决你的问题,但我至少可以告诉你它在哪里,并希望给你一个想法,以便你可以找出其余的。
基于堆栈跟踪,看起来您使用的是CanCan gem。显然,它是在请求到达您的操作之前拦截它,如堆栈跟踪的这一部分所示:
...
activerecord (3.2.14) lib/active_record/querying.rb:5:in `find'
cancan (1.6.10) lib/cancan/model_adapters/abstract_adapter.rb:20:in `find'<- here
cancan (1.6.10) lib/cancan/controller_resource.rb:116:in `find_resource'
...不幸的是,我对这个图书馆不熟悉。但是,在浏览了他们的wiki页面之后,我找到了有关有条件检查授权的信息。
根据这一页,你也许可以通过这样的方法逃脱惩罚:
skip_authorization_check :only => [:add_speaker, :remove_speaker]我认为这样做会抑制CanCan的授权检查,从而防止您的错误。
https://stackoverflow.com/questions/20957993
复制相似问题