我正在升级现有的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
奇怪的是,我真的登录了。
答案 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)
我发现了问题。它与路由文件或任何功能无关,在用户配置中没有授予某些权限。非常感谢您的努力!