0

我正在做一个项目,我希望始终显示反馈最少的帖子(目标是鼓励对正在进行的工作的反馈)。我已经弄清楚了这个计算 - 尽管欢迎反馈 - 但是,我无法将此值分配给:feedback_scorePost 模型上的列 ( )。我需要帮助。

post.rb:

class Post < ActiveRecord::Base
    def feedback_score_calc
        time_passed = ((Time.now - self.created_at)/1.hour).round(3)
        feedback = self.comments.count
        self.feedback_score = time_passed / feedback
    end
end

我需要知道在添加新评论时如何调用此方法,并且我还需要能够按某种形式的时间表计算它。我的目标是在第一次访问时显示参与度最低的分页,以进展到第二次到最少参与度、第三次等...

我的另一个问题是我什至无法通过控制台运行此方法,即使使用def self.feedback_score_calc.

4

1 回答 1

1

使用您提供的代码,Post. 你应该能够做类似的事情

@post = Post.find(some_id_here)
@post.feedback_score_calc

将其创建为具有定义的方法def self.feedback_score_calc并不是您想要做的,因为您正在对特定实例及其Post关系进行计算。

正如评论中提到的@Kien Thanh,如果您想看到它反映在数据库中,您需要在设置列值后调用实例savePost

@post = Post.find(some_id_here)
@post.feedback_score_calc
@post.save

或者在方法本身

def feedback_score_calc
    time_passed = ((Time.now - self.created_at)/1.hour).round(3)
    feedback = self.comments.count
    self.feedback_score = time_passed / feedback
    save
end

另外值得一提的是,您可以通过这样的调用直接写入列(绕过feedback_score=ActiveRecord 设置的方法)write_attribute

def feedback_score_calc
    time_passed = ((Time.now - self.created_at)/1.hour).round(3)
    feedback = self.comments.count

    write_attribute(:feedback_score, time_passed / feedback)
    save
end

reload!最后,在更改您试图从控制台中验证的模型时,您需要终止并重新启动控制台或从控制台中运行。

于 2013-08-10T18:21:17.563 回答