我尝试在用户点击提交后直接呈现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')
答案 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">
#...