2016-02-15 139 views
0

我具有其中我有一个方法的控制器文章:的ActionController :: UrlGenerationError使用的link_to

def report_user 
... 
end 

我有一个视图,其中,我想将执行一些逻辑链接(它不应该采取实际的用户转到不同的页面,只执行逻辑并可能在完成后显示一个对话框)。该逻辑被包含在帖子控制器report_user行动:

<%= link_to "Report User", :controller => :Posts, :action => :report_user %> 

我最终会想也通过一些变量的report_user行动,但我还没有得到那么远,因为我已经遇到这个错误:

没有路由匹配{:行动=> “report_user”:控制器=> “信息”}

消息< < “缺少必需的键:#{missing_keys.sort.inspect}”,除非missing_keys.empty ?

raise ActionController::UrlGenerationError, message 
    end 

我不确定是什么问题。在Posts控制器中有一个名为report_user的操作,它不是私有的。我不确定丢失的所需密钥是什么意思。我已经看到有这种错误的其他人,但他们都有定义需要参数的路由。我没有为此定义任何路线。也许我“要去了解整个事情的方式是错误?

+0

你是如何在'config/routes.rb'中定义该路线的? –

回答

1

正如尼尔斯建议,你需要在routes.rb中的一个条目。假设这是一个使用GET请求成员的路线,该条目是这样的。

resources :posts do 
    get :report_user, on: :member 
end 

接下来,你需要更新你的链接使用路由助手Rails所提供

<%= link_to "Report User", report_user_post_path(@post), remote: true %> 

我包括远程:true选项b/C您提到,点击该链接不应该重新加载页面,这个请求的默认响应是app/views /文章/ report_user.js.erb。

我鼓励你阅读关于在http://guides.rubyonrails.org/routing.html上的Rails路由。

+0

感谢您的帮助。我已经多次阅读了rupbyonrails指南,但仍然没有完全理解这些概念。我已经实现了你说的,现在我得到这个错误:ActionController :: RoutingError(没有路由匹配[GET]“/ posts/312/report_user”) - 再次感谢 – user2884789

+0

我只是重新阅读我的答案,并注意到我带领你使用post:report_user而不是get:report_user。抱歉。我已经更新了我的答案。你能否改变你的routes.rb条目来匹配并重试? – ajporterfield

+0

是的,做到了这一点。谢谢 – user2884789

相关问题