2013-11-24 59 views
0

我知道有可能有很多不同的方法來做到這一點,但使用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 
+0

是否要使用以前的信息您將被刪除以更新主題的帖子?例如,如果您的主題有兩個帖子:A,B,那麼當您刪除帖子B時,主題將隨着帖子A的信息更新? – Thanh

+0

是的。如果您刪除帖子B – Lindsiria

+0

,請嘗試在我的答案中輸入代碼,我希望該主題能夠更新來自帖子A的信息。 – Thanh

回答

1

嘗試使用此代碼:

def destroy 
    @post = Post.find(params[:id]) 
    @topic = @post.topic 
    @post.destroy 
    last_post = @topic.reload.posts.last 
    @topic.update_attributes(last_poster_id: last_post.user_id, last_post_at: last_post.created_at) 
    redirect_to @topic 
end 
+0

謝謝。我不知道重新加載是一個選項。它完美的作品。 – Lindsiria