前提・実現したいこと
RubyでWebアプリを製作中で, その中でUserモデル内に **"received_at (最後にメッセージを受け取った時間,datetime) "**というカラムを追加しました.
そいつの処理を, **ポストを受け取るたびに上書き更新される (つまり, ユーザーは一つの時刻しか持てない) **ようにしたいのですが, いまいちコードの書き方がわからないです.
該当のソースコード
users_controller.rb
def create @user = User.new(user_params) # params[:user]実装は終わっていないことに注意! #マスアサインメント脆弱性 @user.received_at = Time.current if @user.save @user.send_activation_email flash[:info] = "Please check your email to activate your account." redirect_to root_url else render 'new' end end def edit end def update if @user.update(user_params) flash[:success] = "Profile updated" redirect_to @user #更新に成功した場合に扱う else render "edit" end end
posts_controller.rb
def create @post = Post.new(post_params) @post.sender_id = current_user.id @post.receiver_id = User.where.not(id:current_user.id).order(:received_at).first.id @post.save! redirect_to posts_path end
追加情報
schema.rb
create_table "posts", force: :cascade do |t| t.string "dear" t.text "content" t.string "from" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "sender_id" t.integer "receiver_id" end #deviseでモデルを作っている部分は割愛 create_table "users", force: :cascade do |t| t.string "username", default: "", null: false t.date "birthday" t.datetime "received_at" end
試したこと
userコントローラ内のcreateまではかけたのですが, received_atの更新の仕方がさっぱりわかりません.
updateアクション内に記述するのかなと思いましたが, 自信がありません.
補足情報(FW/ツールのバージョンなど)
ruby 2.6.5
rails 6.0.3.5
回答1件
あなたの回答
tips
プレビュー