开发者

Noob question: Class and instance methods in Ruby on Rails

I have a function called update_status inside my comments_controller.rb:

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

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

Because of the way I've set up the website, I want to be able to call c.update_status for any comment c. For example, in my posts_controller, I want to be able to do this:

def show
  @posts = Pos开发者_如何学JAVAt.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

How do I get this to work? I keep getting undefined method error for # < Comment >. Do I have to do def self.update_status? That didn't seem to work either.


You're confusing a helper function update_status() in your controller with a member function on the comment instance. You can make your controller code work by passing the comment to the helper function as an argument:

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

You could also add this as a member function on the Comment class itself, like this:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜