【问题标题】:Rails not updating record and shows no errors even when I know there is at least oneRails 没有更新记录并且即使我知道至少有一个错误也没有显示
【发布时间】:2014-09-24 14:26:01
【问题描述】:

型号

class Clip < ActiveRecord::Base
  validates_length_of :description, maximum: 160
end

控制器

  def update
    @clip = @film.clips.find_by_permalink(params[:id])

    respond_to do |format|
      if @clip.update(clip_params)
        format.html { redirect_to saas_admin_studio_film_path(@studio, @film), notice: 'Clip was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @clip.errors, status: :unprocessable_entity }
      end
    end
  end

查看

<%= render 'saas_admin/shared/errors', resource: resource %>

&lt;%= resource %&gt; 生成 #&lt;Clip:0x0000010c6c64e0&gt; 以便加载资源。但是,&lt;%= resource.errors.any? %&gt; 返回false。如果我将控制器 @clip.update(clip_params) 更改为 @clip.update!(clip_params) 我得到:

Validation failed: Description is too long (maximum is 160 characters)

所以验证有效,只是.errors没有采取显示它。

_errors

<% if resource.errors.any? %>
    <ul>
    <% resource.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
    </ul>
<% end %>

任何想法为什么会发生这种情况?谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 ruby-2.1


    【解决方案1】:

    如您所见,虽然它可能看起来倒退,但 update 和 update 之间的主要区别!是如何处理失败的保存。

    更新 ActiveRecord 类时,!如果记录无效,版本将引发异常。

    更多信息http://api.rubyonrails.org/classes/ActiveRecord/Base.html

    【讨论】:

    • 嗨,Michael,我知道使用 ! 符号的区别,问题是,如果使用 ! 符号会引发异常和验证错误,为什么没有它 resource.errors 为零?
    • 对不起,那我一定是误会了。如果需要!引发异常然后不使用它似乎会导致 resource.errors 成为 nil 有意义。所以我一定错过了什么。道歉
    • 碰巧迈克尔,你帮了我几次……谢谢。
    【解决方案2】:

    我不认为resource@clip 是同一个Clip 对象。

    您在代码中的哪个位置将@clip 指定为resource?我根本看不到您在哪里定义了resource

    如果你把它改成&lt;%= render 'saas_admin/shared/errors', resource: @clip %&gt;,问题就解决了吗?

    【讨论】:

    • 你说得对,这个应用程序使用了inherited_resources,因此edit/update 中的resource 操作与我在update 中加载的不同。所以为了让我清楚,resource@clip 是两个不同的对象.. 我的愚蠢错误。谢谢。
    猜你喜欢
    • 2013-06-26
    • 1970-01-01
    • 2016-12-15
    • 2022-10-15
    • 2022-01-13
    • 2021-07-28
    • 1970-01-01
    • 2021-03-09
    相关资源
    最近更新 更多