Ruby on rails Rails 5未使用self.errors.add引发错误(:base)

Ruby on rails Rails 5未使用self.errors.add引发错误(:base),ruby-on-rails,ruby,devise,ruby-on-rails-5,Ruby On Rails,Ruby,Devise,Ruby On Rails 5,我有一个叫做东西的模型和一个叫做东西的控制器 我随后尝试设置用户可以创建的东西的最大数量 这里有一个警告:终端给出了一个关于弃用警告的警告(不是大问题):传递一个参数来强制重新加载关联现在已弃用,并将在Rails 5.1中删除。请改为在结果集合代理上调用“重新加载”。我应该如何使其消失 问题是:行self.errors.add(:base,“Excelled Things Limit”)没有在视图中显示警报或通知。我将如何实现这一点?它并没有创建一个新的东西(因为我满足了2的最大限制),这是好的

我有一个叫做
东西
的模型和一个叫做
东西
的控制器

我随后尝试设置用户可以创建的
东西的最大数量

这里有一个警告:终端给出了一个关于
弃用警告的警告(不是大问题):传递一个参数来强制重新加载关联现在已弃用,并将在Rails 5.1中删除。请改为在结果集合代理上调用“重新加载”。
我应该如何使其消失

问题是:行
self.errors.add(:base,“Excelled Things Limit”)
没有在视图中显示警报或通知。我将如何实现这一点?它并没有创建一个新的东西(因为我满足了2的最大限制),这是好的,但它只是重新加载一个新表单,这对用户体验来说是可怕的

我在设计Rails 5

这是我的
产品
型号:

class Thing < ApplicationRecord
 belongs_to :user
 validate :thing_count_within_limit, :on => :create
 attr_accessor :validation_code, :flash_notice

 def self.search(search)
      if search
           where("zipcode LIKE ?", "%#{search}%")
      else
           all
      end
 end

 def thing_count_within_limit
      if self.user.things(:reload).count >= 2
           self.errors.add(:base, "Exceeded Things Limit")
      end
 end
end

有人能帮忙吗?非常感谢您的帮助。

有两件事彼此没有联系

首先是弃用警告。因为它只是一个警告,而不是一个错误,所以您可以选择在此时忽略它。如果要删除警告,只需按照其说明更改此行

if self.user.things(:reload).count >= 2

几秒钟后,您的代码就可以正常工作了。Rails验证不会引发任何错误,但会向对象添加错误消息。只需确保向用户显示错误即可。要显示添加到
:base
中的错误,请在
new.html.erb
视图中添加以下内容:

<% if @thing.errors[:base].any? %>
  <div class="error_message">
    <%= @thing.errors.full_messages_for(:base).to_sentence %>
  </div>
<% end %>


如果self.user.things.count>=2,会发生什么?@Pavan-谢谢!这消除了终端错误。我仍然需要它从模型中创建警报(或者至少将其传递到控制器中,这样可以引发警报)。再次感谢!谢谢@spickerman!它就像一个符咒!但是,我如何将其添加到rails方法中呢?您必须将错误分配(复制)到它<代码>警报=@thing.errors.full_messages_for(:base)。to_句子
我不明白你的意思。您是指在模型或控制器中执行还是我将在模型或控制器中执行?您可以在
渲染“new”
行之前在控制器中执行。您是否有代码向用户显示
警报
消息?是的,但它在应用程序控制器中。在您使用
if
语句的回答中,它只是在文档中添加了一个段落标记。我希望它被添加为一个,所以它的样式,我在我的样式表中有它。我该怎么做?
self.user.things.reload.count >= 2
<% if @thing.errors[:base].any? %>
  <div class="error_message">
    <%= @thing.errors.full_messages_for(:base).to_sentence %>
  </div>
<% end %>