Ruby on Rails routes.rb无效

时间:2014-04-08 13:54:41

标签: ruby-on-rails ruby apache routing

我正在升级现有的Rails应用。我想添加一个到routes.rb文件的新路由,该文件链接到控制器中的一个函数。摘自最初的工作 routes.rb文件:

match 'items/:id/add_to_collection/:collection_pid'     =>  'items#add_to_collection', :via => [:get, :post]

控制器文件:

  #add to a task
  def add_to_collection
    @item = Item.find(params[:id])
    @collection_pid = params[:collection_pid]

    #does the item have a RELS-EXT datastream?
    @rels_ext_ds =  RELS_EXT_Datastream.new(:id => params[:id])
    if !@rels_ext_ds.nil?
         @rels_ext_ds.add_relation("fedora:isMemberOfCollection",{"rdf:resource","info:fedora/" + @collection_pid})
         @rels_ext_ds.save_to_fedora
    end
    render :text => "OK"
 end

我想添加一个类似的函数,所以我添加到routes.rb文件:

match 'items/:id/add_to_event/:event_pid'       =>  'items#add_to_event', :via => [:get, :post]

到控制器文件:

  #add to an event
  def add_to_event
    @item = Item.find(params[:id])
    @event_pid = params[:event_pid]

    #does the item have a RELS-EXT datastream?
    @rels_ext_ds =  RELS_EXT_Datastream.new(:id => params[:id])
    if !@rels_ext_ds.nil?
    @rels_ext_ds.add_relation("fedora:isMemberOfEvent",{"rdf:resource","info:fedora/" + @event_pid})
    @rels_ext_ds.save_to_fedora
    end
    render :text => "OK"
  end

当我运行应用程序时(重启Apache之后),应用程序重定向并且不调用该函数。从日志文件:

Started GET "/app/items/123456/add_to_event/testerevent" for 192.168.102.22 at Tue Apr 08 15:42:18 +0200 2014
Processing by ItemsController#add_to_event as HTML
Parameters: {"id"=>"tcmp:123456", "event_pid"=>"testerevent"}
Redirected to https://localhost/app/login
Completed 302 Found in 87ms

我是否需要重新启动其他服务,以某种方式重建应用程序或清除某些缓存?我知道我在控制器中的功能内容是100%正确的,因为当我用新功能的内容替换原始功能的内容时,一切正常。我试图在我的新函数中打印一些日志,但没有找到日志查找,表明函数从未被调用过。它似乎在日志文件中匹配。我在这里俯瞰什么吗?我对RoR很新。谢谢!

编辑:

我发现哪个功能会将我的应用重定向到登录页面。是application_controller.rb文件中名为check_authorization的函数。

def check_authorization
  user = User.find(session['user'])
  unless user.roles.detect{|role|
    role.rights.detect{|right|
      right.action == action_name && right.controller == self.class.controller_path
    }
  }
  flash[:notice] = "Please log in to access the page you requested. (action "+action_name.to_s+", controller "+self.class.controller_path.to_s+")"
  #request.env["HTTP_REFERER"] ? (redirect_to :back) : (redirect_to :controller => 'users',:action=>'login') <-- This function
end

奇怪的是,我真的登录了。

2 个答案:

答案 0 :(得分:0)

首先检查您使用或不使用cancan的任何引擎。

在日志文件"app/items/123456/add_to_event/testerevent"中看到它被重定向,所以 改变路线并检查这是否正确不知道请尝试一次

添加&#34; /&#34;在路线前面。

match '/items/:id/add_to_event/:event_pid'       =>  'items#add_to_event', :via => [:get, :post]

答案 1 :(得分:0)

我发现了问题。它与路由文件或任何功能无关,在用户配置中没有授予某些权限。非常感谢您的努力!