У меня есть простая форма на странице пользователя, которая позволяет пользователю после входа в систему изменять некоторые атрибуты в своем собственном пользовательском объекте. Мнение:
<% form_for @user, :url => {:controller => "teachers", :action => "update"} do |f| %>
<%= f.error_messages %>
<%= f.text_field :display_name %>
<%= f.submit "Update" %>
<% end %>
Мне нужно указать URL, потому что это не стандартный контроллер RESTful. Контроллер обеспечивает
@user = current_user
к просмотру.
Затем действие update
в контроллере пытается обработать сохранение:
@user = current_user
if @user.update_attributes(params[:user])
flash[:notice] = "Successfully updated profile."
redirect_to root_url
else
render :action => 'edit'
end
Это должно обновить атрибут display_name
объекта user
, сохранить его в базе данных и перенаправить на root_url. Вместо этого действие edit
снова обрабатывается с помощью формы error_messages, указывающей, что «пароль не может быть пустым».
Это явно то, с чем связывается Authlogic! Ack! Вот посмотрите на весь мой файл Users.rb
:
class User < ActiveRecord::Base
acts_as_authentic do |c|
c.transition_from_crypto_providers = Authlogic::CryptoProviders::MD5
c.crypto_provider = Authlogic::CryptoProviders::Sha512
c.validate_email_field = false
c.require_password_confirmation = false
c.ignore_blank_passwords = true
c.validate_password_field = false
end
belongs_to :school
validates_presence_of :first_name, :last_name, :email, :password
validates_uniqueness_of :email, :scope => :email, :case_sensitive => false, :message => "is already in our database. Please contact us for help reactivating your account."
ROLES = %w[admin teacher student]
def role_symbols
[role.to_sym]
end
end
Как вы можете видеть, я отключил почти все проверки Authlogic, которые я могу найти, чтобы сделать это простым и функциональным! Все еще не повезло. Если я добавлю password_field
на страницу редактирования, он будет работать успешно, но он также обновит пароль пользователя, когда эта форма предназначена только для обновления его display_name
!
Какие-либо советы о том, как обновить атрибуты объекта user
без необходимости ввода пароля пользователя?