我正在覆盖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/

10-13 05:21