2016-07-27 4 views
1

/users/editページではなく、/ settingsページからユーザーの電子メール/パスワード/イメージを編集するオプションを追加したいとします。だから私は、設定ページに外部のユーザー情報を更新する

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> 
    <%= devise_error_messages! %> 
    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.email_field :email, autofocus: true %> 
    </div> 

    <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> 
    <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div> 
    <% end %> 

    <div class="form-group"> 
    <%= f.label :image %> 
    <%= f.file_field :image, class: 'form-control'%> 
    </div> 

    <div class="form-group"> 
    <%= f.label :cover %> 
    <%= f.file_field :cover, class: 'form-control'%> 
    </div> 

    <div class="field"> 
    <%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br /> 
    <%= f.password_field :password, autocomplete: "off" %> 
    </div> 

    <div class="field"> 
    <%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation, autocomplete: "off" %> 
    </div> 

    <div class="field"> 
    <%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br /> 
    <%= f.password_field :current_password, autocomplete: "off" %> 
    </div> 

    <div class="actions"> 
    <%= f.submit "Update" %> 
    </div> 
<% end %> 

<h3>Cancel my account</h3> 

<p>Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete %></p> 

<%= link_to "Back", :back %> 

を、コードをコピーしたが、それは私が私のコントローラに追加する必要がありますこれは何

undefined local variable or method `resource' for #<#<Class:0x007f60245ab9b0>:0x007f6026f58358> 

を返さ?

答えて

1

カスタムアクションを実行するときは、まずaction in a controllerを作成し、次にrouteを作成してからview fileを作成します。

リソースオブジェクトは、deviseルートでのみ使用できます。

したがって、最初に、どのコントローラにもsettingsという名前のメソッドを追加します(例:users usersroller)。 routes.rbを中そして、

class UsersController < ApplicationController 
    def settings 
     @user = current_user 
    end 
end 

アプリ/ビュー/ユーザー/ settings.html.erb

で、今 '/settings'

get '/settings' => 'users#settings', as: :settings 

という名前のルートでこのアクションを指すルートを追加

<%= form_for(@user, url: registration_path(@user), html: { method: :put }) do |f| %> 
     <%= devise_error_messages! %> 
     <div class="field"> 
     <%= f.label :email %><br /> 
     <%= f.email_field :email, autofocus: true %> 
     </div> 

     <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> 
     <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div> 
     <% end %> 

     <div class="form-group"> 
     <%= f.label :image %> 
     <%= f.file_field :image, class: 'form-control'%> 
     </div> 

     <div class="form-group"> 
     <%= f.label :cover %> 
     <%= f.file_field :cover, class: 'form-control'%> 
     </div> 

     <div class="field"> 
     <%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br /> 
     <%= f.password_field :password, autocomplete: "off" %> 
     </div> 

     <div class="field"> 
     <%= f.label :password_confirmation %><br /> 
     <%= f.password_field :password_confirmation, autocomplete: "off" %> 
     </div> 

     <div class="field"> 
     <%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br /> 
     <%= f.password_field :current_password, autocomplete: "off" %> 
     </div> 

     <div class="actions"> 
     <%= f.submit "Update" %> 
     </div> 
    <% end %> 

<h3>Cancel my account</h3> 

<p>Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete %></p> 

<%= link_to "Back", :back %> 

ので、ユーザーのショーのページでは、設定ページへのリンクを追加

<%= link_to 'Edit', settings_path(user) %> 
+0

#<#:0x007fb488d4e290>の '未定義のローカル変数またはメソッド' resource 'を返します。まず、未定義のユーザーが返されたので、現在のユーザーに置き換えました。同じエラーが発生しました。 –

+0

http://stackoverflow.com/a/6393151/5738789これが答えです –

関連する問題