Ruby on rails RubyonRails:在创建/保存之前迭代来自另一个模型的模型值
我有一个RoR应用程序,允许人们匿名发布,因为他们会将自己的电子邮件地址放在一个字段中 模型是这样的 后模型Ruby on rails RubyonRails:在创建/保存之前迭代来自另一个模型的模型值,ruby-on-rails,ruby,ruby-on-rails-4,devise,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 4,Devise,Ruby On Rails 5,我有一个RoR应用程序,允许人们匿名发布,因为他们会将自己的电子邮件地址放在一个字段中 模型是这样的 后模型 post.rb belongs_to :user # optional: true --> this is for rails 5 用户模型 user.rb has_many :posts 我的帖子模型有以下列:标题、正文、用户\电子邮件:字符串、用户\ id:整数 我的用户模型来自Desive gem 在我的应用程序中,我允许用户在不登录或不注册的情况下发布。这意味着
post.rb
belongs_to :user # optional: true --> this is for rails 5
用户模型
user.rb
has_many :posts
我的帖子模型有以下列:标题、正文、用户\电子邮件:字符串、用户\ id:整数
我的用户模型来自Desive gem
在我的应用程序中,我允许用户在不登录或不注册的情况下发布。这意味着他们可以创建帖子,用户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中用户id的值都不会更改。我如何做到这一点?我正在使用设计宝石顺便说一句。提前谢谢 您的代码中有两个问题:
def associate_post_to_user
Post.where(user_email: self.email).update_all(user_id: self.id)
end
您的代码中有两个问题:
def associate_post_to_user
Post.where(user_email: self.email).update_all(user_id: self.id)
end
由于在为
用户
模型定义钩子之前,您需要保存
您的发布
实例
# 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
post.save
end
end
end
由于在为用户
模型定义钩子之前,您需要保存
您的发布
实例
# 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
post.save
end
end
end
谢谢你!这真的很有帮助。我不知道有一个叫update\u all的助手。顺便问一下,你是怎么认识这些助手的?有没有一本专门的书教你所有这些内容?经常阅读rails api,它会对你有更多帮助。谢谢你的参考!这真的很有帮助。我不知道有一个叫update\u all的助手。顺便问一下,你是怎么认识这些助手的?有没有一本专门的书教你所有这些内容?经常阅读rails api,它会对你有更多帮助。参考资料是谢谢你!我认为做post.save是多余的,因为模型目前还没有保存(这就是为什么在保存之前)。现在我知道不是了,谢谢!非常感谢。我认为做post.save是多余的,因为模型目前还没有保存(这就是为什么在保存之前)。现在我知道不是了,谢谢!