【问题标题】:Error handling in Rails Controller for adding embedded Mongoid documents to ModelRails 控制器中的错误处理,用于将嵌入式 Mongoid 文档添加到模型
【发布时间】:2012-09-27 15:37:49
【问题描述】:

我有一个嵌入文档的 Item 模型。目前,以下 cmets_controller 代码将成功为项目添加注释。但是,如果将评论文档推送到 item 的 cmets 数组上失败,我将不知道这一点。

  #this does work, but i do not know if the push fails
  def create
    comment = Comment.new(:text => params[:text])
    @item.comments << comment
    render :text => comment
  end

我想要这样的东西,但是@item.cmets

  #this does not work
  def create
    comment = Comment.new(:text => params[:text])
    if @item.comments << comment
      render :text => comment
    else
      render :text => 'oh no'
    end
  end

文档推送失败时也不抛出异常:

  #this does not work
  def create
    begin
      comment = Comment.new(:text => params[:text])
      @item.comments << comment
      render :text => comment
    rescue Exception => e
      render :text => 'oh no'
    end
  end

谢谢!

【问题讨论】:

  • 奇怪,在@item.comments &lt;&lt; comment 之后不需要@item.save 吗?

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 mongoid


【解决方案1】:

您必须为评论设置项目,然后将其持久化。如果保存顺利,comment.save 将返回 true,否则返回 false。您可以根据需要处理这两种情况。

def create
  comment = Comment.new(:text => params[:text])
  comment.item = @item  
  if comment.save
    render :text => "yay"
  else
    render :text => "oh no"
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多