2012-06-17 117 views
6

我有一个很难理解路线,我希望有人能帮助我。Rails:路由到自定义控制器动作

这里是我的自定义控制器

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 

和我有文件设置/ 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> 

我必须给我什么路线?我无法弄清楚。如果我把,而不是一个路径“/设置/编辑”它只要我是一个其他资源页面上,因为资源名称付诸表决之前,设置/编辑

THX

+0

首先告诉我们你尝试了什么路线 – rubish

+0

编辑我的问题 – Mexxer

回答

16

下面应该做的食堂了:

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。

+0

非常感谢!我真的只是忘了/在它前面。我结束了使用你的解决方案:) – Mexxer

4

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

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

这个语句定义,当接收到设定/编辑GET请求,调用SettingsController#编辑方法,以及意见可以使用'edit_settings_path'引用此链接。

花一些时间阅读the Rails guide on routing。它解释了路由比其他任何参考更好。

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

1

路线更改为

resources :settings 

而且它很可能只是工作。