Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未通过验证创建Rails闪存消息_Ruby On Rails_Flash - Fatal编程技术网

Ruby on rails 未通过验证创建Rails闪存消息

Ruby on rails 未通过验证创建Rails闪存消息,ruby-on-rails,flash,Ruby On Rails,Flash,我在谷歌上搜索了好几个小时,堆积如山,仍然找不到解决问题的办法 我需要在Rails模型中的验证中显示一条flash消息,但它不希望发生 以下是模型中的验证: validates :name, uniqueness: {message: "that artist already added"} 我甚至在我的控制器中有这个作为后备: class BandsController < ApplicationController def create @band = B

我在谷歌上搜索了好几个小时,堆积如山,仍然找不到解决问题的办法

我需要在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
class-BandsController
但是没有骰子

在application.html.erb中,我得到了

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

<%= yield %>

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

为什么这里没有打印到DOM中

谢谢你的指导


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

flash[:message] = "Something"
render nothing: true, status: 201
如果
不呈现任何内容:true
,则将停止消息呈现的执行。相反,您应该重定向到某处&然后您会注意到在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
仍然没有渲染如果您想要使用flash,则需要使用javascript。请检查以下代码:

 1. remove that render nothing: true statement. 
 2.  app/views/bands/create.js.erb 
    $('#flash_div').text("<%= flash[:message] %>");
1。删除“不呈现任何内容:true”语句。
2.app/views/bands/create.js.erb
$('flash_div')。文本(“”);

创建操作之后,将执行create.js.erb。这段代码将在当前DOM结构中搜索#flash_div并注入您的flash内容

使用渲染时,请使用“flash.now”,使用重定向时,请选择使用“flash”。按以下方式更改上述内容。有关更多信息,请参阅文档()

class-BandsController
我认为这可能是问题所在,但遗憾的是,我所有的html都是通过.js文件而不是Rails erb文件使用.appendTo()呈现的。所以我不知道该如何重定向到那个文件。有什么想法吗?没什么。按照您的指示进入T,但仍然没有向该分区注入任何内容。甚至在
此处添加结束ruby标记“#flash_div”就是您要渲染flash的分区。在您的情况下,您需要使用$('.flash_success')。请粘贴您的application.html.erb代码。我将为您准备准确的代码。application.html.erb代码就是上面显示的代码。我使用的是
$('.flash_success')。文本(“”)在我的create.js.erb中,就像你建议的那样(并在控制器中取出render语句),所以我不确定这是问题所在。当我检查DOM时,flash_success div就在那里,只是空的。无论保存或不保存什么。
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