2012-12-09 58 views
1

我正在使用设计,我试图让用户修改他们的信息而不提供他们的信息。我遵循教程https://github.com/plataformatec/devise/wiki/How-To%3a-Allow-users-to-edit-their-account-without-providing-a-passwordRails没有密码设计

我有这样的链接,允许用户更改自己的设置

<%= link_to "Account Settings", edit_user_registration_path(current_user) %> 

我做什么他的后续

rails g controller Registration 

在注册控制器替换该

class RegistrationsController < Devise::RegistrationsController 
    def update 
    @user = User.find(current_user.id) 
    email_changed = @user.email != params[:user][:email] 
    password_changed = !params[:user][:password].empty? 

    successfully_updated = if email_changed or password_changed 
     @user.update_with_password(params[:user]) 
    else 
     @user.update_without_password(params[:user]) 
    end 

    if successfully_updated 
     set_flash_message :notice, :updated 
     # Sign in the user bypassing validation in case his password changed 
     sign_in @user, :bypass => true 
     redirect_to after_update_path_for(@user) 
    else 
     render "edit" 
    end 
    end 
end 
内容

而在route.rb文件中,我做了这个

devise_for :users, :controllers => { :registrations => "registrations" } 

但它仍将我带到文件夹/views/devise/registration/edit.erb.html,而不是将我带到/views/registrations/edit.erb.html。我也重新启动服务器,我的电脑,但不知道还能做什么

更新:注(客户=用户)

Started GET "/customers/edit.2" for 127.0.0.1 at 2012-12-09 20:06:03 -0500 
Processing by Devise::RegistrationsController#edit as 
    [1m[35mCustomer Load (0.3ms)[0m SELECT `customers`.* FROM `customers` WHERE `customers`.`id` = 2 LIMIT 1 
    [1m[36mPage Load (0.2ms)[0m [1mSELECT `pages`.* FROM `pages` [0m 
    [1m[35mTag Load (0.2ms)[0m SELECT `tags`.* FROM `tags` 
    Rendered devise/registrations/edit.html.erb within layouts/application (0.1ms) 
    Rendered layouts/_shim.html.erb (0.0ms) 
    Rendered layouts/_iewrap.html.erb (0.0ms) 
    Rendered layouts/_header.html.erb (1.1ms) 
    Rendered layouts/_search_tags.html.erb (0.0ms) 
    Rendered layouts/_navigation.html.erb (0.8ms) 
    Rendered layouts/_thirdcol.html.erb (0.0ms) 
    Rendered pages/_link.html.erb (0.0ms) 
    Rendered layouts/_footer.html.erb (0.4ms) 
Completed 200 OK in 41ms (Views: 36.4ms | ActiveRecord: 0.7ms) 


Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2012-12-09 20:06:04 -0500 
Served asset /application.css - 304 Not Modified (5ms) 


Started GET "/assets/activity_managers.css?body=1" for 127.0.0.1 at 2012-12-09 20:06:04 -0500 
Served asset /activity_managers.css - 304 Not Modified (0ms) 

这是通向我到

http://localhost:3000/customers/edit.2 

回答

1

您得到的文件名称和位置错误。

  1. 该文件应该被称为edit.html.erbedit.erb.html

  2. 该文件应位于app/views/registrations

而且,只要一URL .id末追加,这意味着你的东西传递到URL帮手,你不应该。因此,在这种情况下,您可以删除current_user参数,并使用你的链接是这样的:

<%= link_to "Account Settings", edit_user_registration_path %> 
+0

对不起,你是正确的,文件名是edit.html.erb这是我的这个论坛的拼写错误,第二个链接我尝试你的,但仍然处理默认的设计视图。我还注意到,我的编辑文件只有测试目的的html代码,也许会导致一个问题。 – Jseb

+0

你使用命令'rails generate devise:views'来生成你的视图吗? – Ashitaka

+1

如果你这样做了,你必须确保你在'app \ views \ devise \ registrations'中没有'edit.html.erb'文件。 – Ashitaka

0

config/initializers/devise.rb ,取消注释此行config.scoped_views = true,然后重新启动Rails服务器。另外检查你的edit.erb.html是否在正确的目录中,它可能需要在app/views/users/registrations/

UPDATE: 你需要在你的RegistrationsController定义edit方法,因为没有它,将制定的RegistrationsController继承,因此呈现图谋的看法。只需将这两行添加到控制器,它应该可以工作。

def edit 
end 
+0

我只是尝试取消对该行,并尝试放入文件夹的用户/注册/ edit.erb.html和它做'工作。我也尝试重新启动服务器。 – Jseb

+0

请检查答案的更新。 –

+0

我添加了它,什么都没有发生,我应该提到在此之前,我下面的rails g设计:views我不知道它是否改变任何东西! – Jseb