2011-08-30 58 views
3

我有打電話給我comments_controller.rb內update_status功能:noob問題:類和實例方法在Ruby on Rails的

def update_status 
    @comment.relative_value = @comment.points_up - @comment.points_down 
    randomize! 
end 

@comment = Comment.find(params[:id])

,因爲我已經建立了網站的方式,我希望能夠對c.update_status進行任何評論。例如,在我的posts_controller中,我希望能夠做到這一點:

def show 
    @posts = Post.order('trending_value DESC').page(params[:page]).per(5) 
    @post = Post.find(params[:id]) 
    @comments = @post.comments 

    @comments.each do |c| #TODO: FIX 
    c.update_status 
    c.save 
    end 
end 

我該如何得到這個工作?我一直收到# <Comment>未定義的方法錯誤。我必須做def self.update_status?這似乎也沒有工作。

回答

6

您正在將控制器中的助手函數update_status()與註釋實例上的成員函數混淆。

def update_status(comment) 
    comment.relative_value = comment.points_up - comment.points_down 
    comment.save 
    randomize! 
end 

def show 
    @posts = Post.order('trending_value DESC').page(params[:page]).per(5) 
    @post = Post.find(params[:id]) 
    @comments = @post.comments 

    @comments.each do {|c| update_status(c) } 
end 

你也可以將其添加爲在評論類本身的成員函數,像這樣:

class Comment < ActiveRecord::Base 
    def update_status 
    update_attributes(:relative_value => points_up - points_down) 
    randomize! 
    end 
end 

def show 
    @posts = Post.order('trending_value DESC').page(params[:page]).per(5) 
    @post = Post.find(params[:id]) 
    @comments = @post.comments 

    @comments.each do {|c| c.update_status } 
end 
+0

您可以通過註釋傳遞給輔助函數作爲參數,使您的控制器代碼工作謝謝,它現在正在工作 – Jon