Rails 3 - votes as one integer value (to increase) or as a list/quantity of votes in database? Rails 3 - 投票作为一个整数值(用于增加)还是作为数据库中的一系列/数量的投票?

14 浏览
0 Comments

Rails 3 - votes as one integer value (to increase) or as a list/quantity of votes in database? Rails 3 - 投票作为一个整数值(用于增加)还是作为数据库中的一系列/数量的投票?

我是Rails的新手,目前正在开发一个应用,我的同学/校友们可以评论与我们相关的话题/问题,并且每条评论都可以进行投票(赞同或反对)。我为“赞同”和“反对”分别创建了一个模型。现在,在数据库中,我在犹豫,是应该为这两个投票模型设置一个单独的整数,可以增加,这样在控制器动作中就可以使用... += 1。还是应该使用一个投票的列表/集合,然后通过.count方法来显示赞同或反对的数量?

0
0 Comments

在这段对话中,问题的出现是因为讨论了如何在Rails 3中实现投票系统。原始问题是关于在数据库中将投票作为单个整数值(以增加)还是作为投票的列表/数量的问题。以下是问题的原因和解决方法的整理:

问题的原因:

- 应用程序的要求决定了你选择的选项。

- 如果不需要与投票相关的其他信息,可以将投票存储为模型中的单个整数。

- 如果需要存储与投票相关的其他信息(例如每个投票发生的时间和投票者),则可以为每个投票创建一个记录。

解决方法:

- 如果应用程序只需要收集赞成票和反对票的总数,可以在评论模型中创建一个属性,并使用单个整数来表示投票计数。

- 如果需要更多功能(例如验证、错误处理、日志记录等),则可以创建一个单独的投票模型。

关于如何处理投票机制和REST资源的问题:

- 为了更符合RESTful的设计,可以创建一个单独的模型来处理投票。

- 如果只需要计数,可以将其视为评论资源的属性。

- 如果需要更多功能,则应创建一个单独的模型。

关于在哪里处理赞成票和反对票的加减:

- 这应该在模型中完成(模型负责操作数据)。

最后,根据应用程序要求和功能需求,可以选择将投票存储为单个整数或作为投票的记录。

0
0 Comments

Rails中有一个特性叫做counter_cache,它可以在关联模型创建/删除时自动计算关联模型的数量。这是关于它的链接:http://guides.rubyonrails.org/association_basics.html,第4.1.2.4节。它通过在数据库中添加额外的列来实现。

非常感谢您的答案和有用的链接!这是一个很棒的指南。

原因:

问题的出现是因为在某些情况下,我们希望将投票作为一个整数值(用于增加)或作为数据库中的一系列/数量的投票来存储。这种情况可能会出现在需要对投票进行计数和聚合的应用程序中。

解决方法:

解决这个问题的一种方法是使用Rails的counter_cache特性。这个特性可以自动计算关联模型的数量,并将结果存储在一个额外的列中。通过使用counter_cache,我们可以轻松地增加或减少投票的数量,并且不需要手动更新数据库。

另一种解决方法是将投票作为数据库中的一系列/数量的记录来存储。这种方法可以提供更多的灵活性,可以方便地对投票进行查询和聚合。但是,这种方法可能需要更复杂的数据库查询和更多的存储空间。

无论选择哪种解决方法,都需要根据特定的应用程序需求和性能要求来权衡。

以下是使用counter_cache特性的示例代码:

首先,在模型中添加一个整数列用于存储投票计数:

class Post < ActiveRecord::Base
  has_many :votes, dependent: :destroy
  belongs_to :user, counter_cache: true
end

接下来,创建一个migration来添加counter_cache列:

class AddVotesCountToUsers < ActiveRecord::Migration
  def change
    add_column :users, :votes_count, :integer, default: 0
  end
end

然后,在用户模型中启用counter_cache特性:

class User < ActiveRecord::Base
  has_many :posts
end

现在,每当创建或删除关联的投票时,Rails会自动更新用户模型中的votes_count列。我们可以通过访问votes_count属性来获取投票的数量,而不需要执行额外的数据库查询。

希望本文对你理解Rails中投票计数的问题和解决方法有所帮助。

0