Rails:渲染JS警报

时间:2016-02-24 13:18:58

标签: javascript ruby-on-rails ruby

我尝试在用户点击提交后直接呈现js提醒。

以下是我拥有的以及我尝试过的内容:

那是我的erb文件。

<form action="/welcome/subscribe">
    <div>
        <div id="bottomm">
            <input id="bottom" type="text" name="email" placeholder="Adresse mail" />
        </div>
        <div>
            <input type="submit" value="Ok"/>
        </div>
    </div>
</form>

这是我控制器中的订阅方法:

def subscribe
  @test = Test.new
  @test.email = params['email']
  @test.save
  binding.pry
  render js: "alert('test)";
end

但是我收到了这个错误:

Security warning: an embedded <script> tag on another site requested protected JavaScript. If you know what you're doing, go ahead and disable forgery protection on this action to permit cross-origin JavaScript embedding.

有什么想法吗? :/

编辑:

通过添加这两行,我现在可以避免警告:

protect_from_forgery with: :exception
skip_before_action :verify_authenticity_token

但是现在它将我重定向到一个空白页面上,只是写在上面:

alert('test')

2 个答案:

答案 0 :(得分:1)

您在表单中缺少data-remote属性,只需添加它:

<form action="/welcome/subscribe" date-remote="true">
    <div>
        <div id="bottomm">
            <input id="bottom" type="text" name="email" placeholder="Adresse mail" />
        </div>
        <div>
            <input type="submit" value="Ok"/>
        </div>
    </div>
</form>

更新

顺便说一下,根据给定的错误,您可以将protect_from_forgery添加到应用程序控制器:

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  protect_from_forgery with: :exception

  # Other code
end

有关详情,请参阅this documentation

答案 1 :(得分:0)

您需要指定您的表单将异步提交(IE没有完整页面刷新)。使用form_for生成表单时,您应该包含:remote => true。由于您要输入完整的表格,因此需要这样做:

<form action="/welcome/subscribe" date-remote="true">
#...