我很难理解路线,希望有人能帮助我。

这是我的自定义 Controller

class SettingsController < ApplicationController
  before_filter :authenticate_user!

    def edit
      @user = current_user
    end

    def update
      @user = User.find(current_user.id)
      if @user.update_attributes(params[:user])
        # Sign in the user bypassing validation in case his password changed
        sign_in @user, :bypass => true
        redirect_to root_path
      else
        render "edit"
      end
    end
end

而且我有文件settings/edit.html.erb和我的链接
<li><%= link_to('Settings', edit_settings_path) %></li>

路线
get "settings/edit"

对此不起作用,因为然后我得到
undefined local variable or method `edit_settings_path' for #<#<Class:0x00000001814ad8>:0x00000002b40a80>

我必须走哪条路线?我不知道。如果我在其他资源页面上输入“/settings/edit”而不是路径,则它会立即困惑,因为在设置/edit之前放置了资源名称

谢谢

最佳答案

应该执行以下操作:

get 'settings/edit' => 'settings#edit', :as => :edit_settings
# you can change put to post as you see fit
put 'settings/edit' => 'settings#update'

如果直接在链接中使用/settings/edit,则路径中的其他资源名称应该没有问题。但是,如果没有前导斜线(即settings/edit),则可能会出现该问题。
edit_settings_path不起作用的原因可能是因为您未声明命名路由。您必须使用:as选项来定义将通过哪种方法生成此路径/URL。

关于ruby-on-rails - Rails : Route to custom controller action,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11071489/

10-16 00:27