在重定向上加载bootstrap模式

时间:2014-05-30 04:07:40

标签: javascript ruby-on-rails twitter-bootstrap

我有一个允许用户登录的引导模式。我希望未经过身份验证的用户可以在他们所在的任何页面上弹出该符号模式。

会话控制器

  def new
    respond_to do |format|
      format.html
      format.js
    end
  end

会话/ new.js.erb

$("#modal-window").html("<%= escape_javascript(render 'sessions/new') %>");

如果用户点击此控制器,我希望他们看到登录模式。我想我会尝试将它们重定向到new_session_path。这没有用,我得到了一个模板错误。

  def new
    if current_user
      @image = Image.new
    else
      redirect_to new_session_path
    end
  end

1 个答案:

答案 0 :(得分:0)

如果您发送html请求,则应该返回html。 Rails正在寻找一个HTML模板,并没有找到一个。

我建议对要限制的任何控制器或操作使用before_action。这需要制作一个用于登录的html模板。

before_action :verify_user, only: [:new]

def verify_user
  redirect_to new_session_path and return unless current_user
end

(或者您可以重定向到root_path或某处,并在页面加载时触发模态。)

至于模态,我会听取您想要限制的链接的点击次数。

# users.js.coffee
$ ->
  $('body.not-signed-in a.require-sign-in').click, ->
    $.get $('body').data('sign-in-path')
    return false

这意味着您必须在html中添加这些类。

<body class="<%= current_user ? 'signed-in' : 'not-signed-in' %>" data-sign-in-path="<%= new_session_path %>">
  <%= link_to 'link', some_path, class: 'require-sign-in' %>