1

私はデバイスを使用しており、ユーザーが情報を提供せずに情報を変更できるようにしようとしています。チュートリアルhttps://github.com/plataformatec/devise/wiki/How-To%3a-Allow-users-to-edit-their-account-without-providing-a-passwordに従いました。

ユーザーが自分の設定を変更できるようにするためのこのリンクがあります

<%= 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/registrations/edit.erb.html ではなく、/views/devise/registration/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
4

2 に答える 2

1

ファイルの名前と場所が間違っています。

  1. ファイルはedit.html.erbではなく edit.erb.html、 と呼ぶ必要があります。

  2. ファイルは にローカライズされている必要がありますapp/views/registrations

また、.id最後に URL が追加されている場合は常に、URL ヘルパーに渡す必要のないものを渡していることを意味します。したがって、この場合、current_user引数を削除して、次のようにリンクを使用できます。

<%= link_to "Account Settings", edit_user_registration_path %>
于 2012-12-10T23:54:58.090 に答える
0

で、このconfig/initializers/devise.rb行のコメントを解除してから、config.scoped_views = trueRailsサーバーを再起動します。またedit.erb.html、が正しいディレクトリにあるかどうかを確認してください。にある必要がある場合がありますapp/views/users/registrations/

更新edit:メソッドを定義する必要があります。メソッドがRegistrationsControllerないと、Deviseのビューを継承しRegistrationsController、その結果、Devisesのビューがレンダリングされるためです。これらの2行をコントローラーに追加するだけで、機能するはずです。

def edit
end
于 2012-12-09T22:46:05.780 に答える