Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Rails中存储计算值_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何在Rails中存储计算值

Ruby on rails 如何在Rails中存储计算值,ruby-on-rails,Ruby On Rails,我正在做一个项目,我希望总是显示一个反馈最少的帖子(目标是鼓励对正在进行的工作的反馈)。我已经计算出了这个值——尽管欢迎反馈——但是,我很难将这个值分配给Post模型上的一列(:feedback\u score)。我需要帮助 post.rb: class Post < ActiveRecord::Base def feedback_score_calc time_passed = ((Time.now - self.created_at)/1.hour).round

我正在做一个项目,我希望总是显示一个反馈最少的帖子(目标是鼓励对正在进行的工作的反馈)。我已经计算出了这个值——尽管欢迎反馈——但是,我很难将这个值分配给Post模型上的一列(
:feedback\u score
)。我需要帮助

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
class Post
我需要知道在添加新注释时如何调用此方法,并且我还需要能够在某种形式的时间表上计算它。我的目标是在第一次访问时显示参与度最低的用户,并通过分页将其前进到第二到参与度最低的用户,第三,等等


我的另一个问题是,我甚至无法通过控制台运行此方法,即使在使用
def self.feedback\u score\u calc
时,我也会得到一个无方法错误,正如您提供的代码一样,它是
Post
上的一个实例方法。你应该可以做一些类似的事情

@post = Post.find(some_id_here)
@post.feedback_score_calc
将其创建为一个定义为“自我定义”的方法。反馈\u分数\u计算
不是您想要做的,因为您正在对
Post
的特定实例及其关系进行计算

正如@Kien-Thanh在评论中提到的那样,如果希望看到列值反映在数据库中,则需要在设置列值后调用
Post
实例上的
save

@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
同样值得一提的是,您可以通过如下调用
write\u属性直接写入列(绕过
feedback\u score=
method-ActiveRecord-sets)

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

您必须添加
self。在为反馈评分分配值后保存
,以将其保存到数据库中。这似乎很完美。非常感谢。但是,我该如何按计划运行它呢?