我有一个评级模型,用户可以对某个对象进行评级...评级发生后,我想自动创建一个评级日志记录,以便用户可以看到所有评级的列表。
模型:Rating.rb和RatingLog.rb
我看到RatingLog包括除了评级之外的其他事件列表,比如徽章等......非常类似于StackOverflow。
使用Rails 5的正确方法是在创建评级后填充RatingLog.rb ...我应该在Rating.rb中使用after_create
吗?我应该创建一些其他类型的回调吗?很想听听在Rails 5中实现上述内容的正确方法。
谢谢
答案 0 :(得分:1)
我假设你有模特:
class Rating
has_one :rating_blogs
end
class RatingBlog
belongs_to :rating
end
因此,要创建评级博客评级,您可以执行以下操作:
@rating = Rating.new
@rating.build_rating_blog(some_message: 'Message')
@rating.save
因此,在创建@rating
时,将创建评级博客并与@rating
相关联。
答案 1 :(得分:0)
我不知道这是否合适......但是我在创建动作中做到了这一点,在你的情况下我猜: RatingController
POST /_search
{
"query": {
"bool": {
"should": [
{
"ids": {
"type": "product",
"values": [
"100005",
"10002010093"
]
}
},
{
"ids": {
"type": "store",
"values": [
"100003",
"1000201"
]
}
}
]
}
}
}
答案 2 :(得分:0)
另一个选项是after_commit
回调,只有在保存Rating对象时才会运行。
after_create
也可以,但如果您在尝试保存RatingLog时出错,则您创建的评级记录也将无法保存(结帐this answer)。
因此,根据您想要的行为,选择一个:
after_commit
RatingLog错误不会影响评分保存after_create
RatingLog错误回滚评级保存此外: