我需要在新记录上生成(通过连接)代码(包含产品ID)。 问题是必须创建记录才能拥有id。所以我无法在“创建”上生成代码,因为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?
更新
我也需要更新。
最终的解决方案是:
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
答案 0 :(得分:2)
你可以尝试这样的事情。这将在创建后生成一个新代码(第1部分问题,你没有id)和更新之前(第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