簡體   English   中英

Noob問題:Ruby on Rails中的類和實例方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM