1

我正在使用带有 mongoid 2 的 Rails 3。我有一个 mongoid 类论坛,其中 embeds_many 主题。主题 embeds_many forumposts

当我尝试保存论坛帖子时,在我的控制器中执行以下操作...

@forum = Forum.find(params[:forum_id])
@forum.topics.find(params[:topic_id]).forumposts.build(:topic_id => params[:forumpost][:topic_id], :content => params[:forumpost][:content], :user_id => current_user.id,:posted_at => Time.now, :created_at => Time.now, :updated_at => Time.now)
if @forum.save

保存时我得到...

2012-11-14 23:15:39 UTC:Time 的未定义方法“每个”

为什么我会收到这个错误?

我的论坛帖子类如下...

class Forumpost
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Paranoia

  field :content, type: String
  field :topic_id, type: String
  field :user_id, type: String
  field :posted_at, type: DateTime

    attr_accessible :content, :topic_id, :user_id, :posted_at, :created_at, :updated_at

  validates :content, presence: true
  validates :topic_id, presence: true
  validates :user_id, presence: true

    belongs_to :topic
    belongs_to :user

end
4

1 回答 1

7

您的示例代码有很多错误/奇怪,所以让我们看看我们是否可以从头开始:

您说论坛嵌入了许多主题,其中嵌入了许多帖子。但是您的模型正在使用 belongs_to 关联。Belongs_to 用于不同于嵌入文档的引用。如果您的主题模型有这个:

class Topic
  ...
  embeds_many :forumposts
  ...
end

那么你的 Forumpost 模型应该有这个:

class Forumpost
  ...
  embedded_in :topic
  ...
end

在此处阅读参考与嵌入式文档:http: //mongoid.org/en/mongoid/docs/relations.html

下一点,您不需要将 :topic_id 放入论坛帖子,因为您是在主题之外构建它。

下一点,不要保存论坛,保存论坛帖子。与其先构建然后保存,不如尝试一次性创建。

下一点,而不是设置 user_id => current_user.id,尝试设置 user => current_user。这是belongs_to 关联提供的魔力……它更干净,避免弄乱ID。

下一点,为什么需要 created_at (由 Mongoid::Timestamps 提供)和 posted_at ?

最后一点,您不需要设置时间戳,它们应该在创建/更新时自动设置(除非出于某种原因您实际上需要posted_at)。

尝试更多类似的东西:

@forum = Forum.find(params[:forum_id])
@topic = @forum.topics.find(params[:topic_id])
if @topic.forumposts.create(:content => params[:forumpost][:content], :user => current_user)
  #handle the success case
else
  #handle the error case
end   
于 2012-11-15T02:14:04.000 回答