我有一个RoR应用程序,它允许人们匿名发布,因为他们会将他们的电子邮件地址放在一个字段中。Ruby on Rails:从另一个模型迭代模型值before_create/before_save
模型是这样的。
邮政模型。
post.rb
belongs_to :user # optional: true --> this is for rails 5
用户模型
user.rb
has_many :posts
我的岗位模型具有这些列:标题,正文,USER_EMAIL:字符串,USER_ID:整数
我的用户模型从色器件宝石来。
在我的应用程序中,我让用户发帖而不登录或不登录。这意味着他们可以创建帖子,并且user_id列将是空白的(因为他们需要输入他们的电子邮件)。
但是,我想要实现的是,如果他们注册了我的应用程序,与他们注册的用户相关联的所有帖子应该将user_id列更改为其对应的user.id。所以在我的user.rb模型中,我添加了这个代码。
# user.rb
before_save :associate_post_to_user
def associate_post_to_user
Post.all.each do |post|
if post.user_email == self.email
post.user_id = self.id
end
end
end
但是,无论何时他们创建帐户,post_user_id的值都不会更改。我如何实现这一目标?我正在使用设计宝石顺便说一句。提前致谢!在你的代码
感谢您的支持!这真的很有帮助。我不知道有一个名为update_all的助手。顺便说一句,你怎么知道这些帮手?有没有一本教导所有这些的特定书? – Lorelyn
经常阅读rails api,它会帮助你更多。参考是https://apidock.com/rails/v4.0.2/ActiveRecord/Relation/update_all – xiaocui