Обновление Ruby on Rails для разработки пользовательских атрибутов без пароля - PullRequest
4 голосов
/ 09 января 2012

В моем приложении есть два класса учетных записей.Я пытаюсь обновить атрибуты одного из них (Инвесторов).Они созданы с использованием одной формы с помощью устройства.В результате, когда инвестор пытается обновить данные своей учетной записи, форма требует, чтобы они предоставили и подтвердили свой пароль.Я хотел бы, чтобы они могли редактировать (имя, фамилию и т. Д.) Без необходимости вводить свой пароль, если они не хотят менять свой пароль в этих полях.

Вот мой метод обновления в контроллере Инвестора

 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

Вот мой route.rb

  devise_for :accounts, :controllers => { 
    :registrations => 'registrations',
    :passwords     => 'passwords',
    :sessions      => 'sessions' }
  devise_scope :account do
    root :to => 'registrations#new'

И это часть моей модели инвестора, которая ссылается на атрибуты для модели счета.

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 repo, но я не смог заставить его работать на меня.

Если у вас есть предложения или я что-то упустил, пожалуйста, дайте мне знать!

1 Ответ

3 голосов
/ 10 января 2012

Вы отправляете: current_password где-нибудь в ваших параметрах?(даже если оно пустое?) Обычно devise требует, чтобы вы использовали # update_with_password при запросе пароля, поэтому я не уверен, почему вы получаете это с: update_attributes.

...