Rails flash消息未通过验证创建

时间:2015-01-28 07:31:03

标签: ruby-on-rails flash

我用谷歌搜索和堆栈溢出了几个小时仍然找不到我的问题的解决方案。

我需要在我的Rails模型中通过验证显示一条flash消息,但它不希望发生。

以下是模型中的验证:

validates :name, uniqueness: {message: "that artist already added"}

我甚至在我的控制器中将其作为后备:

class BandsController < ApplicationController

def create

  @band = Band.create(id: params[:id])

  if @band.save
    flash[:message] = "Saved."
  else
    flash[:message] = "Nope."
  end

  render nothing: true, status: 201

end

但没有骰子。

在我的application.html.erb中,我有

<div class="flash_success">
  <%= flash[:message] %> 
</div>

<%= yield %>

我觉得应该发生一些事情,如果不是来自模型中的验证,那么在控制器中保存成功。当我检查页面时,甚至会出现div,但是没有消息。

为什么在这里没有打印到DOM?

感谢任何指导。


更新

我应该提一下,我正在使用jQuery来显示我的HTML,而不是Rails视图文件。我知道这可能不太理想,但在这种情况下,它适用于我正在做的事情。

2 个答案:

答案 0 :(得分:0)

flash[:message] = "Something"
render nothing: true, status: 201

使用render nothing: true,您将暂停执行消息呈现。相反,你应该重定向到某个地方&amp;然后你会注意到你的DOM中呈现的flash[:message]

可能是:

def create
  @band = Band.create(id: params[:id])

  if @band.save
    flash[:message] = "Saved."
  else
    flash[:message] = "Nope."
  end

  render bands_path #moving to the band listing page.
end

如果您想拥有闪存,仍然无需渲染,那么您需要使用javascript.Check以下代码:

 1. remove that render nothing: true statement. 
 2.  app/views/bands/create.js.erb 
    $('#flash_div').text("<%= flash[:message] %>");

创建操作后,将执行create.js.erb。此代码将在当前DOM结构&amp;中搜索#flash_div。注入你的flash内容。

答案 1 :(得分:0)

使用渲染时,请使用&#34; flash.now&#34;当你使用时选择重定向使用&#34; flash&#34;。更改以上内容如下。有关详细信息,请参阅文档(flash

class BandsController < ApplicationController

def create

  @band = Band.create(id: params[:id])

  if @band.save
    flash.now[:message] = "Saved."
  else
    flash.now[:message] = "Nope."
  end

  render nothing: true, status: 201

end