我有一个控制器帖子我有一个方法:
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的动作,它不是私有的。我不确定缺少所需的键是什么意思。我已经在其他人身上看到了这个错误,但他们都有定义需要参数的路由。我没有为此定义任何路线。可能我会以错误的方式处理整件事情?
答案 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路由。