Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 自定义id列问题_Ruby On Rails - Fatal编程技术网

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之前执行其余操作