我是 Rails 的新手,并且在成功登录网站时一直试图显示成功消息。我一直在尝试使用 bootbox.js 来显示登录成功后存储在 ruby 哈希中的消息 - 不幸的是,我对 Javascript 还比较陌生,当我创建成功登录时,我无法获得任何引导箱要显示的内容。下面的代码显示了我想要显示消息的位置。
<div class="sidebar pull-left">
<!-- sidebar -->
<div class="col-xs-6 col-sm-3 sidebar-offcanvas" id="sidebar" role="navigation">
<div class="list-group">
<span class="fa-stack fa-lg">
<i class="fa fa-square-o fa-stack-2x"></i>
<%= link_to '', root_path, class: "fa fa-home fa-fw fa-stack-1x" %>
</span>
<span class="fa-stack fa-lg">
<i class="fa fa-square-o fa-stack-2x"></i>
<%= link_to '', help_path, class: "fa fa-question fa-fw fa-stack-1x" %>
</span>
</div>
</div>
</div>
<div class="main-content">
<%= content_tag :div, class: "flash_messages", data: {flash: flash} do %>
<% end %>
<% content_for :alert do %>
<script type="text/javascript">
<%= render 'users/show_flash_messages.js' %>
</script>
<% end %>
<% flash.each do |key, value| %>
<%= yield :alert %>
<% end %>
<%= yield %>
</div>
我使用 <%= content_tag :div, class: "flash_messages", data: {flash: flash} do %> <% end %> 将散列内的数据传递给客户端上的 javascript 数组。ruby 哈希在此处的控制器中初始化:
def create
@user = User.new(user_params)
if @user.save
# sign_in @user
flash[:success] = "Welcome!"
redirect_to @user
else
render 'new'
end
end
然后我在 users.js.coffee 中创建了一个方法,我希望通过从 js 数组中获取所需的信息,使用 bootbox 警报对话框显示警报:
Messages = flashMessage: (flash) ->
flash_message = flash[1]
bootbox.alert flash_message
return
我用 javascript 编写了这个,然后使用转换器将其转换为咖啡脚本(这应该工作吗?)。然后我有一个名为 _show_flash_messages.js.erb 的 rails javascript 文件,我在其中调用 flashMessage 函数。
$(function() {
messages = $('.flash_messages').data('flash');
Messages.flashMessage(messages);
});
我已经能够在引导警报中显示信息,但是我更喜欢使用这些引导框对话框来显示信息。就像我说的我是 Rails 的新手,这是我第一次尝试正确集成 javascript,所以我很可能遗漏了一些明显的东西。
作为参考,这是希望在其上显示对话框的页面的 HTML:
<% provide(:title, @user.name) %>
<div class="center hero-unit">
<div class="user-profile">
<span class="user-header">
<%= gravatar_for @user %>
<h2>
<%= @user.name %>
</h2>
</span>
<span id="page-content">
<p>
This is where a short biography will go.
</p>
</span>
</div>
</div>