2013-07-04 82 views
0

嗨我很新的轨道,并试图添加新的发布方法时遇到问题。设计新的自定义操作后没有登录

我想创建一个新的方法,使用户。

所以我修改我的用户控制器有以下方法

def enable 

if ([email protected]) 
    @user.enabled = true; 
    if @user.save 
    UserMailer.send_enabled_message(@user).deliver 
    redirect_to users_url, notice: 'User was successfully enabled.' 
    else 
    redirect_to users_url, notice: 'Could not enable user.' 
    end 
else 
redirect_to users_url, notice: 'Could not enable user.' 
end 

而且我已经添加以下到我的路线:

match 'users/:id' => 'users#enable', :via => 'post', :action => :enable 

而下面要加入我的视图显示用户列表:

<td><%= link_to 'Enable', user, method: :enable, data: { confirm: 'Are you sure?' } %></td> 

这一切似乎工作,但我认为我的路线已覆盖我的登录帖子,因为我无法再登录。我是否需要创建一个新表单,或者我可以像这样快速提交吗?

同样沿着同样的路线,当你使用link_to时,我该如何做这样的事情:<%= link_to 'enable', enable_user(user) %>我该如何/在哪里创建enable_user方法?

感谢GoGoCarl现在工作。只好我的路线改成这样:

resources :users do 
    post 'enable', on: :member 
end 

和我的观点这样:

<td><%= link_to 'Enable', enable_user_path(user), method: :enable, data: { confirm: 'Are you sure?' } %></td> 

回答

3

你所有的问题都可以通过简单地改变你的路线定义的routes.rb来回答。删除您添加的行,并在那里你大概有:

resources :users 

将其更改为:

resources :users do 
    post 'enable', :on => :collection 
end 

这在为集合(所以,/用户)的资源水平增加了一个处理程序,而不是给一个成员(/ users/2)。它会自动通过用户控制器中的“启用”方法进行处理。

所以,第一个答案 - 是的,你是匹配发布给用户的所有URL,以便确实覆盖登录POST。如上所述定义将按照您想要的方式进行布线。

第二个答案,你如何获得网址?那么,现在它是这样路由的,你可以运行rake路由来查看定义的路径是什么。现在,我就饶你麻烦:

enable_users_path 

所以,你可以这样做:

link_to 'enable', enable_users_path 

此外,通过在上述方式确定的路线,为您生成该路径的方法。你也可以通过属性定义这个方法,如果你曾经遇到过这个问题。

因此,如果您对上面的变化,你应该:

  1. 能够得到您的登录回来(以及任何其他POST方法向用户)
  2. 有一个方法enable_users_path得到URL
  3. 能够发布到/用户/启用

这应该让你去。有关路由的更多信息: http://guides.rubyonrails.org/routing.html