从文章#show中添加评论到文章的最佳做法

时间:2018-01-19 14:46:01

标签: ruby-on-rails

我按照导轨的'Getting Started'指南

一切都运作良好,我几乎阅读了所有其他章节。我在评论模型上添加了一个自定义验证器来练习一点。 验证器添加和错误,我想通过使用相同的文章代码在评论/ _form.html.erb部分打印它

<% @comment.errors.full_messages.each do |msg| %>
     <li><%= msg %></li>
<% end %>

验证器工作正常(事务成功回滚)但部分中没有打印任何内容。 @comment是零。

出现错误的最佳方法是什么?

编辑:

这是草稿验证器

    class AntiSpamValidator < ActiveModel::Validator
  def validate(record)
    if record.body.starts_with? 'http://'
      record.errors[:body] << "Pls don't spam!"
    end
  end
end


class Comment < ApplicationRecord
  belongs_to :article
  validates_with AntiSpamValidator
end

1 个答案:

答案 0 :(得分:0)

我建议阅读ActiveModel::Errors

在这里,您会发现需要添加错误消息关于正文,而不是在消息中添加消息。

所以你可以这样做:

...
if record.body.starts_with? 'http://'
  record.errors.add(:body, :spam, message: "Pls don't spam!")
end
...

顺便说一下:

.full_messages将本地化字段名称添加到错误消息中,以便您打印如下内容:"Body Pls don't spam!

如果您只想显示消息,可以在视图中执行以下操作:

<% @comment.errors.each do |field, msg| %>
     <li><%= msg %></li>
<% end %>

但当然这会破坏Rails的默认错误消息