gpt4 book ai didi

ruby-on-rails - 在我的迁移中修改记录会引发 authlogic 错误

转载 作者:行者123 更新时间:2023-12-04 06:54:22 27 4
gpt4 key购买 nike

我将一些列添加到我的数据库表之一,然后填充这些列:

def self.up
add_column :contacts, :business_id, :integer
add_column :contacts, :business_type, :string

Contact.reset_column_information
Contact.all.each do |contact|
contact.update_attributes(:business_id => contact.client_id, :business_type => 'Client')
end

remove_column :contacts, :client_id
end

线路 contact.update_attributes导致以下 Authlogic 错误:
You must activate the Authlogic::Session::Base.controller with a controller object before creating objects
我不知道这里发生了什么 - 我没有使用 Controller 方法来修改表中的每一行。我也没有创建新对象。

如果联系人表为空,则不会发生该错误。

我有一个谷歌,当你运行你的 Controller 测试时似乎会发生这个错误,并通过添加 before_filter :activate_authlogic 来修复。对他们来说,但这似乎与我的情况无关。

有任何想法吗?我难住了。

这是我要求的联系人模型:
class Contact < ActiveRecord::Base
belongs_to :contactable, :polymorphic => true
has_many :phone_numbers, :as => :callable
has_many :email_addresses, :as => :emailable

accepts_nested_attributes_for :phone_numbers
accepts_nested_attributes_for :email_addresses

validates_presence_of :first_name, :last_name
validates_format_of :first_name, :last_name, :with => /^[-a-zA-Z ]+$/

default_scope :order => 'first_name ASC, last_name ASC'

def full_name
"#{self.first_name} #{self.last_name}"
end

def to_s
full_name
end
end

版本信息: Rails 2.3.5,Authlogic 2.1.3

rake db:migrate --trace 输出 可以在这里找到在线馅饼: http://pastie.org/944446

观察者信息:

我有一个 ActivityObserver那是在观察我的 Contact模型并创建 Activity使用 after_update打回来。

在我的 Activity模型我是 骇人听闻的 关联 @current user使用 before_save 创建的事件打回来。

这是相关的代码片段:
class ActivityObserver < ActiveRecord::Observer
observe :contact

def after_update(subject)
Activity.create(:action => 'Updated', :subject => subject)
end
end

class Activity < ActiveRecord::Base
belongs_to :subject, :polymorphic => true
belongs_to :user

def before_save
# FIXME: This is a messy hack way to get the user's id
self.user = UserSession.find.record
end
end

这是 绝对 Authlogic 参与其中的地方。 KandadaBoggu 是 winrar - 非常感谢您的洞察力!!!

在修复方面,我认为基本上没有任何修复。如果我想在通过迁移更新我的联系人时创建一个事件,根据定义,没有 @current_user关联。我会想办法解决这个问题,但 KandadaBoggu 肯定回答了我的问题。

最佳答案

当您更新 Contact 模型时,它看起来像是 Authlogic session 对象是如何创建的。您是否有任何观察者或过滤器之前/之后 Contact模型?

来自 Authlogic::Session::Base.activated? 的 authlogic 文档

# Returns true if a controller has been set and can be used properly. 
# This MUST be set before anything can be done. Similar to how ActiveRecord
# won't allow you to do anything without establishing a DB connection. In your
# framework environment this is done for you, but if you are using Authlogic
# outside of your framework, you need to assign a controller object to Authlogic
# via Authlogic::Session::Base.controller = obj. See the controller= method for
# more information.

通过设置 controller 来解决此问题的一种方法修改前 Contact模型实例,即:
def self.up
add_column :contacts, :business_id, :integer
add_column :contacts, :business_type, :string

Authlogic::Session::Base.controller =
Authlogic::ControllerAdapters::RailsAdapter.new(self)

Contact.reset_column_information
Contact.all.each do |contact|
contact.update_attributes(:business_id => contact.client_id,
:business_type => 'Client')
end

remove_column :contacts, :client_id
end

注:我还没有测试过这段代码。

关于ruby-on-rails - 在我的迁移中修改记录会引发 authlogic 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2717766/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com