Jim*_*Jim 5 ajax ruby-on-rails
我有一个表格部分我在两个地方使用添加新成分(在食谱应用程序中).当我第一次构建应用程序时,我希望用户能够在填写新配方卡时添加新配料.我使用了一个模态弹出窗口和AJAX,因此弹出新的成分表单,完成,当点击提交按钮时,一些jQuery隐藏了模态框并更新了页面上的一些选项标签.
从食谱表格我称成分部分使用<%= link_to 'New ingredient', new_ingredient_path, :remote => true %>.我的成分new.html.erb文件只包含对partial的调用:
<%= render 'form' %>
Run Code Online (Sandbox Code Playgroud)
并且_form.html.erb看起来像:(其他字段为了简洁起见)
<%= form_for @ingredient, :remote => true do |f| %>
<%= render 'shared/ingredient_error_messages' %>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :amount %>
<%= f.text_field :amount%>
</div>
<div class="actions">
<%= f.submit "Save ingredient" %>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我的问题是我现在希望用户也能够从网站的成分部分创建新的成分.由于我不需要网站该部分的模态框和jQuery功能,我宁愿将其视为一个vanilla HTML请求.但是,我不知道如何根据需要"关闭"AJAX功能,或者这是不是很好的做法.
我想到将链接中的参数传递给新的成分表单并使用它来控制表单中的:remote属性.这里的最佳做法是什么?理想情况下,这是一种从链接控制表单远程属性的方法,允许我将AJAX保留在一个位置并在另一个位置使用HTML.我可以轻松地将表单复制为非AJAX版本并调用它,但这不是很干......
简单一点怎么样:
<%= form_for @ingredient, :remote => request.xhr? do |f| %>
Run Code Online (Sandbox Code Playgroud)