首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails不更新记录,即使我知道至少有一个错误,也不会显示错误。

Rails不更新记录,即使我知道至少有一个错误,也不会显示错误。
EN

Stack Overflow用户
提问于 2014-08-01 11:30:34
回答 2查看 771关注 0票数 1

模型

代码语言:javascript
复制
class Clip < ActiveRecord::Base
  validates_length_of :description, maximum: 160
end

控制器

代码语言:javascript
复制
  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

视图

代码语言:javascript
复制
<%= render 'saas_admin/shared/errors', resource: resource %>

<%= resource %>生成#<Clip:0x0000010c6c64e0>,从而加载资源。但是,<%= resource.errors.any? %>返回false。如果我将控制器@clip.update(clip_params)改为@clip.update!(clip_params),就会得到:

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

所以验证是有效的,只是.errors没有使用它来显示它。

_errors

代码语言:javascript
复制
<% if resource.errors.any? %>
    <ul>
    <% resource.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
    </ul>
<% end %>

知道为什么会这样吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-01 11:41:52

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

在代码中,您将@clip指定为resource吗?我根本看不出你在哪里定义了resource

如果您将其更改为<%= render 'saas_admin/shared/errors', resource: @clip %>,那么问题解决了吗?

票数 1
EN

Stack Overflow用户

发布于 2014-08-01 11:36:41

正如您所看到的,尽管它看起来可能是向后的,但更新和更新之间的主要区别是!是如何处理失败的保存。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25079285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档