11

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

这是我的自定义控制器

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”而不是路径,一旦我在其他资源页面上,它就会混乱,因为资源名称放在设置/编辑之前

谢谢

4

2 回答 2

22

以下应该做:

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。

于 2012-06-17T13:17:27.927 回答
5

如果你想明确定义路线,你会使用类似的东西

get 'settings/edit' => 'settings#edit', :as => edit_settings

此语句定义当接收到设置/编辑的 GET 请求时,调用 SettingsController#edit 方法,并且视图可以使用“edit_settings_path”引用此链接。

花点时间阅读Rails 路由指南。它比任何其他参考资料都更好地解释了路由。

还要记住rake routes任务,它列出了应用程序中定义的所有路由的详细信息。

于 2012-06-17T13:21:04.783 回答