我有一个表格,我的目标是
如果我使用普通形式(不是远程)
<%= form_with model: @car, id: "car-form", local: true do |f| %>
那么redirect_to正在工作,但是我用action.js.erb编写的引导模式代码没有执行。
如果我用远程格式
<%= form_with model: @car, id: "car-form", remote: true do |f| %>
然后redirect_to停止工作,但我用action.js.erb编写的引导模式代码正在执行。
我需要both...Is,有什么办法吗?
发布于 2020-04-23 05:44:08
几乎没有什么值得注意的:
1)默认情况下,form_with
是一个remote: true
。当您传递local
时,它是一个非ajax形式。看看这个有参考
2)如果你想点击你的action.js.erb
,然后在你的控制器中,你调用format.js
单程:
def action_name
@foo = Foo.bar
respond_to do |format|
if @foo.errors.any?
format.js
else
format.html { redirect_to :index }
end
end
end
另一种方式是:
Your controller action
----------------------
def action_name
@foo = Foo.bar
respond_to do |format|
format.js
end
end
action.js.erb
----------------
<% if @foo.errors.count > 0 %>
your modal with errors in it
<% else %>
window.location.href='<%= url_for(:action => :index) %>'
<% end %>
发布于 2020-04-23 07:14:23
正如@Sri上面所写的,您可能因format
而不同,或者以最简单的方式使用flash
Rails提供的方法在flash.now
的相同请求中显示flash
方法
因此,编写一个表单local: true
并在控制器中:
if @foo.save
render 'something_new'
else
flash.now[:error] @foo.errors.map(&:message).join(', ')
render 'edit' // render the same view with form
end
(或者做类似的操作以获得正确的错误消息或您自己的消息)
接下来,您可以将它显示在表单上,作为一个模式:
<% if flash.any? %>
<div class='modal'>
...
<% flash.each do |key, value| %>
<div class="flash <%= key %>"><%= value %></div>
<% end %>
</div>
<% end %>
也使模态在开始时可见。
$(".modal").modal('show')
https://stackoverflow.com/questions/61385561
复制相似问题