以下是使用键值显示Flash消息的方法。
application_html.erb
<div class="container-fluid">
<% flash.each do |message_type, message| %>
<div class="alert alert-<%= message_type %>" data-turbolinks="false">
<a class="close lay" data-dismiss="alert">×</a>
<% if message.is_a?(String) %>
<div id="flash_<%=message_type%>">
<%= sanitize(message) %>
</div>
<% end %>
</div>
<% end %>
</div>
现在我在我的控制器中:
def saved
...
respond_to do |format|
format.js
end
end
以我的形式:
<%= link_to... remote: true, method: :put %>
现在在我的saved.js.erb文件中,我有以下内容:
<% if request.put? %>
<% response = current_user.saved_articles.new(article: @article) %>
<% if !response.valid? %>
FLASH SOMETHING HERE
<% else %>
<% response.save %>
FLASH SOMETHING HERE
<% end %>
<% else request.delete? %>
<% current_user.saveds.delete(@article) %>
FLASH SOMETHING HERE
<% end %>
如何通知:&#34;您已保存此文&#34;并注意:&#34;你没有保存这篇文章&#34; ?
答案 0 :(得分:1)
将Flash消息组件存储为部分并在 js.erb 文件中调用,如果您愿意,请在几秒钟后将其删除。
如果您打算将部分命名为 _flash.html.erb ,则需要注意一点,Flash对象值在部分内容中将变为零:
我发现这不适合我的原因是我有 将我的部分 flash命名为。显然Rails为其创建了一个局部变量 部分使用部分名称(不带“”字符。)所以我 有一个变量冲突。只要我将部分名称更改为 除了_flash之外的一切都很完美。 I found the answer here:Rails flash [:notice]总是nil
- 来自此SO post
<div class="container-fluid">
<%= render partial: 'shared/flash_messages' %>
</div>
<% flash.each do |message_type, message| %>
<div class="alert alert-<%= message_type %> flash_messages" data-turbolinks="false">
<a class="close lay" data-dismiss="alert">×</a>
<% if message.is_a?(String) %>
<div id="flash_<%=message_type%>">
<%= sanitize(message) %>
</div>
<% end %>
</div>
<% end %>
def saved
if saved?
flash[:success] = "You have saved this article"
else
flash[:danger] = "You have unsaved this article"
end
respond_to do |format|
format.js
end
end
<% if request.put? %>
<% response = current_user.saved_articles.new(article: @article) %>
<% if !response.valid? %>
// append to any element
$('body').append('<%= j render partial: "shared/flash_messages"%>').fadeOut(2000, function(){
$('.flash_messages').remove();
});
<% else %>
<% response.save %>
$('body').append('<%= j render partial: "shared/flash_messages"%>').fadeOut(2000, function(){
$('.flash_messages').remove();
});
<% end %>
<% else request.delete? %>
<% current_user.saveds.delete(@article) %>
$('body').append('<%= j render partial: "shared/flash_messages"%>').fadeOut(2000, function(){
$('.flash_messages').remove();
});
<% end %>
答案 1 :(得分:1)
实际节省saved
行动?如果您要保存记录(或更新或删除),则应该(不必)使用create
和update
以及destroy
操作执行此操作。把所有事情都放在一个动作中就不是正确的方法,即使你正在操纵数据库记录......为什么不适当的CRUD:
def create
# create logic
render js: { model: @your_model, status: @your_model.persisted? : :ok, :unprocessable_entity }
end
(and other actions)
然后在您的js中,您可以询问异步呼叫状态,并从那里构建消息。