编辑:解决了,我不得不将序列化列从类型整数更改为类型文本,因为int不能用于序列化。
是否有一些保存到我错过的数据库?我正在尝试将数组保存到数据库列。我正在使用序列化,以便我可以在列中存储多个团队ID。如果我在rails控制台中执行它,它可以工作,但是当我从我的模型中执行它时似乎不起作用。
以下是Rails控制台中的作用:
match_entry = Match.new
match_entry.team_ids << 1
match_entry.team_ids << 2
match_entry.save
保存后,我看到match_entry.team_ids包含[1,2]。以下是我的模型中无法使用的内容:
file.each_line do |line|
if line.include?("team_ids")
str = line.sub("team_ids:", "").chomp
arr = str.split(",")
match_entry.team_ids << arr[0].to_i
match_entry.team_ids << arr[1].to_i
end
end
match_entry.save
match_entry.team_ids甚至正确地返回[1,2],但它似乎并没有真正保存到数据库中。它将保存到数据库,没有team_ids的值。
答案 0 :(得分:0)
很难从模型中的代码片段中判断出您正在执行的操作是在对象Match的实例上运行,还是在Class Match上运行,然后创建一个新的Match对象保存。
无论你如何做,我认为你的问题是你在模型中操作的Match实例对象在操作后没有被保存。如果从before_save回调调用,您的代码块应该按照写入的方式工作。
class Match
before_save :add_team_ids
private
def add_team_ids
self.team_ids << 1
self.team_ids << 2
end
end
在after_save回调中,你需要再次保存,因为在after_save回调被触发之前首次保存了对象。
class Match
after_save :add_team_ids
private
def add_team_ids
self.team_ids << 1
self.team_ids << 2
self.save
end
end
答案 1 :(得分:0)
我发现序列化不适用于整数,因此我必须将列更改为文本类型才能使其正常工作。