フィールドにメールアドレスを入れると、匿名で投稿できるRoRアプリケーションがあります。Ruby on Rails:他のモデルからモデル値を反復するbefore_create/before_save
モデルはこのようになります。
ポストモデル。タイトル、本文、USER_EMAIL:文字列、USER_ID:整数
私のユーザモデルが工夫宝石から来た
post.rb
belongs_to :user # optional: true --> this is for rails 5
ユーザモデル
user.rb
has_many :posts
マイポストモデルでは、これらの列があります。
私のアプリでは、ログインしたりサインアップしたりせずにユーザーの投稿を許可しています。これらは投稿を作成できることを意味し、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
ただし、アカウントを作成するたびに、投稿のuser_idの値は変更されません。これをどのように達成するのですか?私はdevise gem btwを使用しています。前もって感謝します!あなたのコード内
ありがとうございます!これは本当に役に立ちます。私は、update_allというヘルパーがあることを知らなかった。ところで、あなたはどうやってこれらのヘルパーを知っていますか?これらすべてを教える特定の本はありますか? – Lorelyn
頻繁にレールのAPIを読んでください、それはあなたにもっと役立ちます。参照はhttps://apidock.com/rails/v4.0.2/ActiveRecord/Relation/update_all – xiaocui