У меня есть два класса учетных записей в моем приложении. Я пытаюсь обновить атрибуты одного из них (Инвесторы). Они создаются с использованием одной формы через устройство. В результате, когда инвестор пытается обновить свою учетную информацию, форма требует, чтобы они предоставили и подтвердили свой пароль. Я бы хотел, чтобы они могли редактировать (имя, фамилию и т. Д.) Без ввода пароля, если они не хотят менять свой пароль с этими полями.Обновление Ruby on Rails при разработке атрибутов пользователя без пароля
Вот мой метод обновления в контроллере Investor
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
Вот мой routes.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 репо, но я не смог заставить его работать для меня.
Если у вас есть предложения или если у меня что-то отсутствует, сообщите мне!
Я не знаю, где находится файл разработки, содержащий метод update_with_password; devise установлен как драгоценный камень, хотя, знаете ли вы, где я могу его найти? – seanpat09
Если вы используете bundler/textmate, вы можете использовать «mate $ (bundle show devize)» из командной строки, чтобы отредактировать источник драгоценного камня. В противном случае это должно быть в пути $ GEM_HOME. В источнике драгоценных камней вы можете просмотреть этот метод в: lib/devise/models/database_authenticatable.rb Вы хотите использовать этот метод только в том случае, если вы _want_ потребуете пароль при обновлении. Попробуйте проверить, случайно ли вы проходите в params [: current_password] – RobH
Спасибо, что помогли до сих пор, я немного новичок в этом. Я действительно хочу обновить, не требуя пароля. В моей форме есть все поля, которые могут быть обновлены, включая пароль и пароль_подтверждение. Я хочу иметь возможность обновлять остальную информацию, не помещая ничего в полях для пароля и пароля_подтверждения. Когда я это сделаю, я получаю сообщение об ошибке, говорящее, что они не могут быть пустыми. Кроме того: current_password не определен нигде в наших файлах проекта, но он определен в devem gem source; это то, о чем вы говорили? – seanpat09