【问题标题】:Rails 4, Calling destroy method on my User model: RuntimeError at /users/ Can't modify frozen hashRails 4,在我的用户模型上调用销毁方法:/users/ 处的 RuntimeError 无法修改冻结的哈希
【发布时间】:2015-11-18 05:14:27
【问题描述】:

我有一个成员模型和一个用户模型。

成员.rb

 has_one :user, dependent: :destroy, autosave: true

用户.rb

 belongs_to :member, dependent: :destroy

我在用户中有一个destroy方法......

def destroy
 session[:return_to] ||= request.referer
 if current_user.admin?
  @user.destroy
  respond_to do |format|
    format.html { redirect_to(session.delete(:return_to))}
    format.json { head :no_content }
  end
else
  respond_to do |format|
    format.html { redirect_to(session.delete(:return_to))}
    format.json { head :no_content }
  end
end

结束

我也在我的应用程序中唱 sunspot:solr。

当我尝试通过 destroy 方法删除用户时,我的控制台会转储此用户

SOLR Request (10.6ms)  [ path=update parameters={} ]
SOLR Request (11.6ms)  [ path=update parameters={} ]
SOLR Request (13.6ms)  [ path=update parameters={} ]
SOLR Request (12.3ms)  [ path=update parameters={} ]
SOLR Request (13.1ms)  [ path=update parameters={} ]
SOLR Request (14.8ms)  [ path=update parameters={} ]
SOLR Request (14.4ms)  [ path=update parameters={} ]
SOLR Request (16.2ms)  [ path=update parameters={} ]

并继续前进。然后最终以

停止
  RuntimeError at /users/simon-walshe
  Can't modify frozen hash

发生了什么。我猜是关系有问题什么的,但我想不通....

【问题讨论】:

    标签: ruby-on-rails-4 hash solr destroy


    【解决方案1】:

    当你删除一个对象时,属性会被rails冻结。阅读更多关于它的信息here

    所以你可以做的是,在删除/销毁之前,你可以检查对象是否已经被销毁。

    类似

    user.destroy unless user.destroyed?
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 2013-02-11
      • 2016-03-26
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多