我知道有可能有很多不同的方法來做到這一點,但使用http://guides.rubyonrails.org/active_record_querying.html,我一直無法找到適合我的最佳方式。查詢活動記錄和外鍵幫助[Rails 4]
我正在使用RoR進行論壇,當從主題中刪除帖子時遇到問題。
每個主題都有很多帖子。每篇文章都有一個主題。
當您發佈主題時,它會更新主題表,更新上次發佈者和時間。但是,當您刪除帖子時,它會保留帖子的舊數據。
當我刪除一篇文章時,我需要用前一篇文章的數據更新主題表。
我知道刪除後,我需要查詢主題中的所有帖子,找到最後一個並使用其數據更新主題。
但我該怎麼做?
查詢會是這樣的
SELECT * FROM帖裏(topic_id = topic.id)ORDER BY ID DESC
柱控制器
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy]
def index
@posts = Post.all
end
def show
end
def new
@post = Post.new
end
def edit
@post = Post.find(params[:id])
end
def create
@post = Post.new(
:content => params[:post][:content],
:topic_id => params[:post][:topic_id],
:user_id => current_user.id)
if @post.save
@topic = Topic.find(@post.topic_id)
@topic.update_attributes(
:last_poster_id => current_user.id,
:last_post_at => Time.now)
flash[:notice] = "Successfully created post."
redirect_to "/topics/#{@post.topic_id}"
else
render :action => 'new'
end
end
def update
@post = Post.find(params[:id])
if @post.update_attributes(params[:post].permit!)
@topic = Topic.find(@post.topic_id)
@topic.update_attributes(:last_poster_id => current_user.id, :last_post_at => Time.now)
flash[:notice] = "Successfully updated post."
redirect_to @post
else
render :action => 'edit'
end
end
def destroy
@post = Post.find(params[:id])
@post.destroy
**# WHAT QUERY STATEMENT GOES HERE**
@topic.update_attributes(
:last_poster_id => @post.user_id,
:last_post_at => @post.created_at)
redirect_to "/topics/#{@post.topic_id}"
end
end
是否要使用以前的信息您將被刪除以更新主題的帖子?例如,如果您的主題有兩個帖子:A,B,那麼當您刪除帖子B時,主題將隨着帖子A的信息更新? – Thanh
是的。如果您刪除帖子B – Lindsiria
,請嘗試在我的答案中輸入代碼,我希望該主題能夠更新來自帖子A的信息。 – Thanh