标签: after-create

Rails:after_create停止保存时出现异常

简单的问题.我有一个ActiveRecord模型,我希望在保存记录后执行后期处理.所以在模型中我有一个queue_for_processing方法,可以将作业粘贴到我的Resque队列中.为了在我的记录成功持久化后执行此操作,我在我的模型中编写了以下内容:

after_create :queue_for_processing
Run Code Online (Sandbox Code Playgroud)

很简单.我原以为一切都按预期工作除了昨晚我的redis服务器发生故障,事情发生了变化.我的期望是记录仍然会被保存,我可以稍后手动处理该作业.但是queue_for_processing方法抛出异常(预期行为)并停止保存记录.

我误解了after_create是如何工作的吗?或者我的理解是否正确并且发生了什么时髦?

谢谢.

activerecord ruby-on-rails resque after-create

20
推荐指数
1
解决办法
5673
查看次数

我应该如何在模型中使用带有条件的after_create

我有一个在创建对象后调用的方法

after_create :send_welcome_email
Run Code Online (Sandbox Code Playgroud)

有没有办法将此限制为条件,例如对象属性的值

after_create :send_welcome_email unless self.role == "Celebrant"
Run Code Online (Sandbox Code Playgroud)

例如?

after-create ruby-on-rails-3

16
推荐指数
1
解决办法
1万
查看次数

Rails - 创建回调和嵌套属性后的执行顺序

我有一个简单的设置UserUserProfile模型与User has_one :user_profile和UserProfile belongs_to :user.

但我无法理解Rails如何定义after_create回调的执行顺序并accepts_nested_attributes_for在我的模型中定义.让我们考虑这两种情况.

情况1:

class User < ActiveRecord::Base
  has_one :user_profile
  accepts_nested_attributes_for :user_profile
  after_create :test_test
end
Run Code Online (Sandbox Code Playgroud)

现在,如果我通过控制台创建用户(也使用user_profile_attributes哈希),after_create则会在创建用户及其用户配置文件后触发回调.

案例2: 如果after_create放在顶部,

class User < ActiveRecord::Base
  after_create :test_test
  has_one :user_profile
  accepts_nested_attributes_for :user_profile
end
Run Code Online (Sandbox Code Playgroud)

在创建用户之后但在创建用户配置文件之前触发回调.

这是它预期运作的方式.Rails在这里做什么?执行顺序是否仅由代码的顺序决定?

我在哪里开始深入研究或调试这个?

ruby-on-rails callback model-associations after-create

12
推荐指数
1
解决办法
5595
查看次数

Friendly_id使用belongs_to关联的值

我有以下型号:

class User < ActiveRecord::Base
  extend FriendlyId
  friendly_id :first_name, :use => :slugged

  has_one :professor
  after_create :create_professor

  def create_professor
    self.professor = Professor.create 
  end

end 

class Professor < ActiveRecord::Base
  extend FriendlyId
  friendly_id :first_name, :use => :slugged

  belongs_to :user
  def first_name
    user.first_name 
  end

end
Run Code Online (Sandbox Code Playgroud)

create_professor调用时,因此执行传递给Professor模型(self.professor = Professor.create),当它尝试在此方法中创建slug时:

def first_name
  user.first_name 
end
Run Code Online (Sandbox Code Playgroud)

我得到了一个undefined method first_name for nil:NilClass,所以教授对象似乎不知道他的相关用户是什么.

关于如何解决这个问题的任何提示?

ruby-on-rails associations friendly-id after-create

5
推荐指数
1
解决办法
861
查看次数

Rails 3如何在after_create中获取当前记录ID

就像标题所说,我正在尝试获取我刚刚创建的记录的ID,我试图在控制台中获取它,但ID是零.

这是我在after_create开头的控制台中获得的自我打印

<Unit id: nil, uuid: "9f11be13-8d07-4471-a3bb-f87943966bbd", organization_id: 33, property_id: 430, door_number: "3", created_at: "2014-12-05 13:27:57", updated_at: "2014-12-05 13:27:57", deleted_at: nil, size: "5 1/2", door_number_int: 3, leases_count: 0, tasks_count: 0, notes: nil, state_id: 68, state_tasks_count: 2, current_lease_id: nil, next_lease_id: nil, state_tasks_serie: 1, state_tasks_serie_count: 2, price_asked: #<BigDecimal:7fc79162cb80,'0.123E3',9(18)>, availability_date: nil, comments_count: 0>
Run Code Online (Sandbox Code Playgroud)

有没有办法获取记录ID?

这是我到目前为止所尝试的

after_create
   self.save
end

before_save
  if self.id.present?
    # do stuff
  end
end
Run Code Online (Sandbox Code Playgroud)

它不是很漂亮但它有效

回答@MarekLipka:它不会导致无限循环,因为记录只创建一次.

我也试过用:

after_create
   reload

   # do stuff if self.id
end
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.

就像@PauloFidalgo说的那样,除了在after_save方法之外我无法获得id.虽然我很奇怪,我可以在第二个before_save中获取它(由after_create中的save保存).

activerecord ruby-on-rails after-create ruby-on-rails-3

1
推荐指数
1
解决办法
5146
查看次数

Rails:跳过 after_create

我有 2 个型号:

class User < ActiveRecord::Base
    has_one :client
end

class Client < ActiveRecord::Base
    belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

我通常创建user第一个,并有一个过滤器,在创建后after_create创建。clientuser

after_create :create_client
Run Code Online (Sandbox Code Playgroud)

我有一个新的案例,其中存在,并且我想在已经存在的情况client创建。在这种情况下,当我创建时我想跳过过滤器。 user clientuserafter_create

我知道我需要after_create :create_client, unless: ____,但我不知道如何区分这一点。

ruby-on-rails callback after-create ruby-on-rails-4

1
推荐指数
1
解决办法
2137
查看次数