使用link_to的ActionController :: UrlGenerationError

时间:2016-02-15 23:28:45

标签: ruby-on-rails

我有一个控制器帖子我有一个方法:

def report_user
...
end

我有一个视图,我想要一个将执行某些逻辑的链接(它实际上不应该将用户带到另一个页面,只执行逻辑并可能在完成后显示一个对话框)。逻辑包含在Posts控制器的report_user操作中:

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

我最终还想将一些变量传递给report_user操作,但是我没有那么远,因为我遇到了这个错误:

没有路线匹配{:action =&gt;“report_user”,:controller =&gt;“帖子”}

消息&lt;&lt; “缺少必需的密钥:#{missing_keys.sort.inspect}”除非missing_keys.empty?

    raise ActionController::UrlGenerationError, message
  end

我不确定问题是什么。 Posts控制器中肯定有一个名为report_user的动作,它不是私有的。我不确定缺少所需的键是什么意思。我已经在其他人身上看到了这个错误,但他们都有定义需要参数的路由。我没有为此定义任何路线。可能我会以错误的方式处理整件事情?

1 个答案:

答案 0 :(得分:1)

正如Nils建议的那样,您需要在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 / posts / report_user.js.erb。

我建议您阅读form-serialize上的Rails路由。