对AJAX和非AJAX调用使用相同的rails表单

时间:2016-02-18 09:58:59

标签: ruby-on-rails ajax

我有一个模型的simple_form。新动作的形式基本如下:

<%= simple_form_for @patient do |f| %>
    .... fields
<% end %>

我想在New视图中使用此表单,但也使用AJAX的引导模式。如果我使用这种语法:

<%= render partial: 'patients/form', locals: {patient: @patient, remote: true} %>

但是当我这样做时,我只能使用远程访问本地变量,而不是@remote,这将在new视图中呈现错误。

修改

对部分的调用:

<%= render partial: 'patients/form', locals: {patient: @patient, remote: true } %>

形式:

<%= simple_form_for @patient, remote: @remote do |f| %>
    .... fields
<% end %>

有什么方法可以做到这一点? 谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将request作为Ajax发送到模式,并form使用remote: request.xhr?以便您可以将表单用于Ajax和非-Ajax调用。

<a href="#" class="btn btn-warning btn-sm" data-remote="true" data-toggle="modal" data-target="#modalAddPatient">Add new patient</a>

以表格

#form

<%= simple_form_for @patient, remote: request.xhr? do |f| %>
    .... fields
<% end %>

request.xhr?如果truerequest则返回Ajax request,否则返回false。所以Ajax调用remote: true和非Ajax调用remote: false

<强> 更新

确定。不知何故,上述方法对你没有用。尝试以下方法

在调用部分

时定义局部变量
<%= render partial: 'patients/form', locals: {patient: @patient, modal: true} %>

以表格

<% modal ||= false %>
<% remote = modal ? true : false %>
<%= simple_form_for @patient, remote: remote do |f| %>
    .... fields
<% end %>