【问题标题】:simple_form_for with custom controller action带有自定义控制器操作的 simple_form_for
【发布时间】:2015-12-14 21:43:57
【问题描述】:

我的用户索引视图中的这一行:

<%= simple_form_for current_user, :url => user_change_client_path,
                                  :method => :patch,
                                  :id => current_user.id do |f| %>

产生以下错误:

No route matches {:action=>"change_client", :controller=>"users"} missing required keys: [:user_id]

我在我的控制器中定义了 change_client 操作。在我的 routes.rb 我有:

resources :users, only: [:index] do
  patch 'change_client'
  patch 'approve'
end

Rake 路线显示:

user_change_client PATCH  /users/:user_id/change_client(.:format)   users#change_client
user_approve PATCH  /users/:user_id/approve(.:format)               users#approve

我做错了什么导致错误?

【问题讨论】:

    标签: ruby-on-rails routes simple-form-for


    【解决方案1】:

    您的路线如下:

    user_change_client PATCH  /users/:user_id/change_client(.:format)
    

    需要user_id 参数。当您调用此助手时,将当前用户传递给它,如下所示:

    user_change_client_path(current_user)
    

    【讨论】:

    • 那么我如何将它合并到 simple_form_for 代码行中?我尝试了几个变体并不断收到语法错误
    • &lt;%= simple_form_for current_user, :url =&gt; user_change_client_path(current_user), :method =&gt; :patch do |f| %&gt; 不起作用吗?该错误消息专门与 url 帮助器方法有关。确保没有其他地方是您意外调用的。
    • 啊刚刚回来说我不小心删除了“do”,现在没有语法错误,谢谢!现在正在测试以确保一切正常
    • params[:id] 在控制器操作中为零,现在试图找出原因,在 simple_form_for 行中指定 :id => current_user.id 没有帮助
    • params[:user_id] 有效,我猜我这样做会丢失 params[:id] 速记
    猜你喜欢
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    相关资源
    最近更新 更多