在 "create" 上连接 id
Concatenate id on "create"
- Ruby 2.1
- Rails 4.2
我需要在新记录上生成(通过串联)一个代码(其中包含产品 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
- Ruby 2.1
- Rails 4.2
我需要在新记录上生成(通过串联)一个代码(其中包含产品 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