在 "create" 上连接 id

Concatenate id on "create"

我需要在新记录上生成(通过串联)一个代码(其中包含产品 ID)。 问题是必须创建记录以具有 id。所以我无法在 "create" 上生成代码,因为 de id 尚不存在。我卡住了。

到目前为止它有效,但仅在更新时有效。

class Product < ActiveRecord::Base

  before_save :generate_code

  private

  def generate_code
    tag = tags.map(&:name).join(", ").first(2)
    self.code = ("#{category_id} #{tag} #{id} #{glaze.code}").parameterize
  end

end

如何创建新记录,同时将您的 ID 连接到 "code"?

更新:

更新时我也需要它。

最后的解是:

class Product < ActiveRecord::Base
  after_save :generate_code
  private

  def generate_code
    tag = tags.first.name.first(2)
    update_column(:code, ("#{category_id}" + "#{tag}" + "#{id}" + "#{glaze.code}").parameterize.upcase)
  end
end

你可以尝试这样的事情。这将在创建后(您没有 ID 的第 1 部分问题)和更新之前(第 2 部分问题,因为您已经有一个 ID,所以可以像以前一样正常工作)生成新代码

class Product < ActiveRecord::Base
  after_create :generate_code
  before_update :generate_code
  private

  def generate_code
    tag = tags.map(&:name).join(", ").first(2)
    if changed?
      self.code = "#{category_id} #{tag} #{id} #{glaze.code}"
    else
      update_attribute(:code,"#{category_id} #{tag} #{id} #{glaze.code}")
    end
  end
end

正如@MohammadAbuShady 提到的,这也应该有效,因为它是直接数据库编辑,没有回调或验证

class Product < ActiveRecord::Base
  after_save :generate_code
  private

  def generate_code
    tag = tags.first.name.first(2)
    update_column(:code, "#{category_id} #{tag} #{id} #{glaze.code}")
  end
end