2015-02-10 89 views
0

说一个User有很多Photos。我想每一个名字像photo如此:如何在关联保存之前保存关联信息?

def safe_name 
    self.name = "#{user.code}#{user.photos.count + 1}" 
end 

而当联想保存验证此名称。我可以在after_save中调用该方法,并使其正常工作,但照片的名称不应该是空白的。如何在保存照片之前抓住它,使其有效?

回答

0

可以使用before_validation回调

+0

问题是我无法在'photo'保存之前访问'user'作为名称中的关系。 – 2015-02-10 02:59:55

+1

你可以,你只是这样做: @photo = user.photos.create(你的属性在这里) 这样你将有照片实例中的user_id。您在验证之前在照片模型中运行回调,然后验证以检查名称是否正确 – 2015-02-10 03:01:24

+0

这并不坏,但我宁愿将逻辑置于控制器外面。似乎它不能做模型方面虽然?我已经通过了所有我的测试,目前为止还有一个临时名称,一旦保存了'photo',它就会重命名。 – 2015-02-10 03:09:00

0

如果您需要操作数据,然后验证它,您可以使用活动记录回调before_validation。这将修改名称,然后调用你的验证器。

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

+0

问题是'photo'保存之前,我不能访问'user'作为名称的关系。 – 2015-02-10 03:01:20