[英]Noob question: Class and instance methods in Ruby on Rails
我在comments_controller.rb中有一個名為update_status的函數:
def update_status
@comment.relative_value = @comment.points_up - @comment.points_down
randomize!
end
其中@comment = Comment.find(params[:id])
由於我設置網站的方式,我希望能夠為任何評論c調用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
嗎? 這似乎也沒有用。
您在控制器中使用注釋實例上的成員函數來混淆輔助函數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
您還可以將此作為成員函數添加到Comment類本身,如下所示:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.