自定义ID列问题

时间:2014-12-25 02:41:57

标签: ruby-on-rails

在我的列表模型中,我设置了一个方法

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})}

问题如何立即更新以前的记录。可能它很基本,但无法弄明白。谢谢

2 个答案:

答案 0 :(得分:1)

你在字符串上调用save。您的代码中需要listing.save

答案 1 :(得分:1)

# 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