【问题标题】:Rails: Connecting Model to another ModelRails:将模型连接到另一个模型
【发布时间】:2012-03-03 18:50:09
【问题描述】:

我刚刚在我的数据库中为我的 micropost 表创建了新列,这些列是 vote_count comment_count,我想将它连接到投票模型 vote_up 计数和评论模型评论计数。由于我只是添加了这些列,尽管有投票和 cmets,我如何将这些其他模型连接到 micropost 模型以填充新列。任何建议都非常感谢!

微博模型

class Micropost < ActiveRecord::Base
  attr_accessible :title, :content, :view_count
  acts_as_voteable
  belongs_to :school
  belongs_to :user
  has_many :comments
  has_many :views
  accepts_nested_attributes_for :comments
end

【问题讨论】:

    标签: ruby-on-rails database ruby-on-rails-3 associations rails-activerecord


    【解决方案1】:

    看起来您正在尝试使用 rails 支持的 counter_cache,但您的列名错误。

    您想将comments_countvotes_count 列添加到您的数据库中,而不是您拥有的那些。

    然后您可以将其连接到您的模型,如下所示:

    class Micropost< ActiveRecord::Base
      attr_accessible :title, :content, :view_count
      acts_as_voteable
      belongs_to :school
      belongs_to :user
      has_many :comments, :counter_cache => true
      has_many :views
      accepts_nested_attributes_for :comments
    end
    

    其中一半的投票有点棘手,因为您在 acts_as_votable 模块中使用了一些额外的代码,但是如果我理解正确的话,计数器缓存是您想要的方式。

    这里有更多关于它们的信息:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

    【讨论】:

    • 我在 mircopost 表中有一个 cmets_count 列,该列是否自动计算 micropost 拥有的 cmets 数量?同样对于选票,由于我使用的是acts_as_voteable,因此我假设它还有更多内容,然后自动计数?
    • 对于 cmets,它会自动为您增加/减少 cmets_count。您可以随时拨打comments_count 来获取您微博的当前评论数。对于acts_as_votable,请看这里:github.com/ryanto/acts_as_votable 在“缓存”下,您只需要按照指定的方式将一些列添加到数据库中,它就会按照您的意愿进行操作。
    • 只需将 cmets_count 初始化为您已经拥有的任意数量的 cmets,它应该会取代那里的形式。
    • 就像我说的,只需在 github 页面上的“缓存”下查看它,就在这里,它是您需要的确切分步说明。 github.com/ryanto/acts_as_votable
    • 是的,那是我的错误,您只能在 belongs_to 关联上使用 counter_cache。我会在一秒钟内更新我的答案。
    猜你喜欢
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多