首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails错误操作调用

Rails错误操作调用
EN

Stack Overflow用户
提问于 2014-01-06 19:47:30
回答 1查看 80关注 0票数 0

我有一些简单的操作,我想通过js调用它们,但是得到了奇怪的错误,下面是我的代码:

主计长:

代码语言:javascript
复制
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

路线:

代码语言:javascript
复制
resources :c_events,         :except => [:show] do
      member do
        post :add_speaker
        post :remove_speaker
      end
    end

查看:

代码语言:javascript
复制
<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访问。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-06 20:58:07

这是一个部分的答案,因为我不知道如何精确地解决你的问题,但我至少可以告诉你它在哪里,并希望给你一个想法,以便你可以找出其余的。

基于堆栈跟踪,看起来您使用的是CanCan gem。显然,它是在请求到达您的操作之前拦截它,如堆栈跟踪的这一部分所示:

代码语言:javascript
复制
...
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页面之后,我找到了有关有条件检查授权的信息。

根据这一页,你也许可以通过这样的方法逃脱惩罚:

代码语言:javascript
复制
skip_authorization_check :only => [:add_speaker, :remove_speaker]

我认为这样做会抑制CanCan的授权检查,从而防止您的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20957993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档