我正在覆盖desve用户的注册控制器,以检查用户是否更改了城市,如果更改了城市,则在会话中再次加载geokit对象。
session[:geo_location] = User.geocode(resource.city) if resource.city_changed?
问题是那不是在做。下面的代码不会返回任何内容。如果删除
if resource.city_changed?
,无论资源是否已更改,它都会在所有情况下执行此操作。 User::RegistrationsController < Devise::RegistrationsController
def update
self.resource = resource_class.to_adapter.get!(send(:"current_# {resource_name}").to_key)
if resource.update_with_password(params[resource_name])
session[:geo_location] = User.geocode(resource.city) if resource.city_changed?
set_flash_message :notice, :updated if is_navigational_format?
sign_in resource_name, resource, :bypass => true
respond_with resource, :location => after_update_path_for(resource)
else
clean_up_passwords(resource)
respond_with_navigational(resource){ render_with_scope :edit }
end
end
end
最佳答案
是否呼叫?如果是,则清除模型及其所有属性的“脏”状态。在设置属性之后,但在调用update_with_password
之前,您需要调用save
。
关于ruby-on-rails - Object.attribute_changed?在Rails Controller 中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10307811/