私のアプリケーションには2つのクラスのアカウントがあります。私はそれらの1人(投資家)の属性を更新しようとしています。それらはdeviseを介して1つのフォームを使用して作成されます。結果として、投資家が自分のアカウント情報を更新しようとすると、フォームはパスワードを提供して確認する必要があります。これらのフィールドでパスワードを変更しない限り、パスワードを入力せずに(姓、名字など)編集できるようにしたいと思います。ここでRuby on Railsを更新すると、パスワードなしでユーザの属性が変更されます
は、投資家コントローラ
def update
session[:investor_params] ||= {}
session[:investor_params].deep_merge!(params[:investor]) if params[:investor].present?
@investor.attributes = session[:investor_params]
params[:investor_params].delete(:password) if params[:investor_params][:password].blank?
params[:investor_params].delete(:password_confirmation) if params[:investor_params][:password_confirmation].blank?
respond_to do |format|
if @investor.update_attributes(params[:investor_params])
session[:investor_params] = nil
sign_in(@investor.account, :bypass => true)
format.html { redirect_to(projects_url, :notice => 'Investor was successfully updated.') }
format.xml { render :xml => @investor, :status => :created, :location => @investor }
else
format.html { render :action => "edit", :layout => "investor" }
format.xml { render :xml => @investor.errors, :status => :unprocessable_entity }
end
end
end
の私の更新方法は、ここに私の登録コントローラ
class RegistrationsController < Devise::RegistrationsController
layout "index"
protected
def after_sign_up_path_for(resource)
new_user_url(:account => resource)
end
end
はここ
devise_for :accounts, :controllers => {
:registrations => 'registrations',
:passwords => 'passwords',
:sessions => 'sessions' }
devise_scope :account do
root :to => 'registrations#new'
私のroutes.rbをだであり、これはの部分でありますアカウントモデルの属性を参照する私の投資家モデル。ここで
class Investor < ActiveRecord::Base
has_one :account, :as => :profile
accepts_nested_attributes_for :account
が
class Account < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :invited_by, :invited_by_id
を参照されたアカウントのモデルの一部である私は、工夫のgithubのレポの提言を試みたが、私はそれが私のために働いて得ることができませんでした。
提案がある場合、または私に何かが不足している場合は、お知らせください。
私は、update_with_passwordメソッドを含むdeviseファイルの場所を知りません。私はそれを見つけることができるか分かりますか? – seanpat09
bundleler/textmateを使用している場合は、コマンドラインから "mate $(bundle show devise)"を使用して宝石のソースを編集できます。それ以外の場合は$ GEM_HOMEパスになければなりません。宝石のソースでは、次の方法でメソッドを見ることができます:lib/devise/models/database_authenticatable.rb 更新中にパスワードを要求する必要がある場合にのみ、この方法を使います。誤ってparams [:current_password]を渡していないかどうかを確認してみてください – RobH
これまでにありがとうございました。私は実際にパスワードを必要とせずに更新したい。私のフォームには、passwordやpassword_confirmationなど、更新可能なすべてのフィールドがあります。私は、パスワードとパスワードの確認のためにフィールドに何も置かなくても残りの情報を更新できるようにしたい。私がそれをすると、空ではないというエラーメッセージが表示されます。また、:current_passwordはプロジェクトファイルのどこにも定義されていませんが、devise gem sourceに定義されています。あなたが言っていたものですか? – seanpat09