Ruby on rails 自定义id列问题
在我的列表模型中,我设置了一个方法Ruby on rails 自定义id列问题,ruby-on-rails,Ruby On Rails,在我的列表模型中,我设置了一个方法 def set_listing_number listing_number="TM#{created_at.year}#{id}" end 我有一些记录是在运行迁移以创建listing_number列之前创建的。我想一次更新所有记录,但一直收到这个错误。 下面是我运行的代码,它在控制台中验证方法是否正确时产生错误。我无法保存作业 listing_number=listing.set_listing_number => "TM2014574"
def set_listing_number
listing_number="TM#{created_at.year}#{id}"
end
我有一些记录是在运行迁移以创建listing_number列之前创建的。我想一次更新所有记录,但一直收到这个错误。
下面是我运行的代码,它在控制台中验证方法是否正确时产生错误。我无法保存作业
listing_number=listing.set_listing_number
=> "TM2014574"
2.0.0-p247 :003 > listing_number.save
NoMethodError:“TM2014574”的未定义方法“save”:字符串
我试过一对,但没有成功,我在这里也找到了像这样的一对
Listing.all.each{|n| n.update_attributes(:listing_number =>"TM#{n.created_at.year})}
问题是如何立即更新以前的记录。也许这是很基本的,但我想不出来。谢谢您正在用字符串呼叫
save
。您需要列表。请在代码中保存
# This method in Listing Model
def set_listing_number
listing_number="TM#{created_at.year}#{id}"
end
# In controller
Listing.all.each do |listing|
listing.set_listing_number
listing.save
end
或者您可以将其重构为
Listing.all.each do |listing|
listing.update listing_number: "TM#{listing.created_at.year}"
end
顺便说一句,谢谢,我在rails控制台中运行了代码,listing_number列的值仍然是nil?屏幕截图会提供更多信息,而不是它工作,不要担心,重构代码工作得最好,谢谢我在rails控制台中更新它,但是当我创建一个新列表时,列没有更新,我设置了一个after_save回调,它将在创建后调用函数,但仍然为零。然后尝试preter_save回调,只需将字段设置为值,然后ORM将在_save:set_list_number之前执行其余操作