如何检查触发JS切换的动作?if user_signed_in?`

时间:2014-09-08 15:08:57

标签: jquery ruby-on-rails ruby-on-rails-4

我使用Devise,因此在我想要隐藏非登录用户的内容时,我只想添加一个快速的内容:

<% if user_signed_in? %>在视图的一部分周围瞧瞧。

现在的问题是,我有一个按钮,可以触发页面上的切换JS动作。

这是我的HTML:

<div id="togglesidebar" class="pull-right">
     <button class="btn btn-default btn-lg btn-primary"><i class="fa fa-child"></i> Submit News</button>
</div>

这是JS:

var ready;
ready = function() {

    // This is the Sidebar toggle functionality
    var toggleSidebar = $("#togglesidebar");
    var primary = $("#primary");
    var secondary = $("#secondary");

    toggleSidebar.on("click", function(){

        if(primary.hasClass("col-sm-9")){
            primary.removeClass("col-sm-9");
            primary.addClass("col-sm-12");
            secondary.css('display', 'none');
        }
        else {
            primary.removeClass("col-sm-12");
            primary.addClass("col-sm-9");
            secondary.css('display', 'inline-block');
        }
    });
};

$(document).ready(ready);
$(document).on('page:load', ready);

我想要发生的是,如果current_user没有登录,他们应该被重定向到“请登录”&#39;在侧边栏切换之前的模态。

然后,在成功登录后,它应该将它们重定向回同一页面并切换补充工具栏。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用erb设置js变量,如下所示:

var user_signed_in = <%= user_signed_in? %>

然后在你的js中使用那个变量来确定你是否应该显示模态等。

答案 1 :(得分:0)

您可以直接在视图中混合JS和Rails,如下所示:

<script type="text/javascript">
  var ready;
  ready = function() {

      // This is the Sidebar toggle functionality
      var toggleSidebar = $("#togglesidebar");
      var primary = $("#primary");
      var secondary = $("#secondary");

      toggleSidebar.on("click", function(){

      <% if user_signed_in? %>

          if(primary.hasClass("col-sm-9")){
              primary.removeClass("col-sm-9");
              primary.addClass("col-sm-12");
              secondary.css('display', 'none');
          }
          else {
            primary.removeClass("col-sm-12");
              primary.addClass("col-sm-9");
              secondary.css('display', 'inline-block');
          }

      <% else %>

        window.location.replace("<%= escape_javascript(login_path) %>");

      <% end %>

      });
  };

  $(document).ready(ready);
  $(document).on('page:load', ready);
</script>