我用谷歌搜索和堆栈溢出了几个小时仍然找不到我的问题的解决方案。
我需要在我的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视图文件。我知道这可能不太理想,但在这种情况下,它适用于我正在做的事情。
答案 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