繁体   English   中英

扩展表单而无需重新加载页面,导轨

[英]Extend forms without page reload, rails

我正在寻找一种解决方案以扩展我的表单而无需重新加载页面。 首先,我尝试使用咖啡或javascript渲染部分图像,但是escape_javascript无效。

这是视图

<%= form_for @recipe = current_user.recipes.build do |f| %>
  <%= f.label :name, "Recipe Name" %>
  <%= f.text_field :name %>
  <%= button_to "Add Ingredient", '#', class: "btn btn-lg btn-primary", id: "add" %>  
  <p></p>
  <%= f.submit class: "btn" %>
<% end %>

每次单击按钮,以上表格应扩展为以下部分

  <div id="recipe-ingredients">Quantity
    <%= f.fields_for :quantities, @recipe.quantities.build do |quantity| %>
      <%= render 'quantity_fields', f: quantity %>
    <% end %>
  </div>

_quantity_fields

<%= f.label :amount, "Amount:" %>
<%= f.text_field :amount %>
<%= f.collection_select(:ingredient_id, Ingredient.all, :id, :name) %>

这种方法不起作用(recipes.js.erb)

$(document).ready(function() {
  $("#add").click(function() {
    $("p").append("<%= escape_javascript 
    render(:partial => 'quantities') %>");
  });
});

有一种解决方法(请参阅下文),但我正在寻找更好的解决方案。

$(document).ready(function() {
  $("#workout-week").append(<%= escape_javascript(
    Haml::Engine.new(File.read(File.join(Rails.root,'app/views',
    '_show_period.html.haml'))).render(Object.new, period: @period)) %>);
});

第二种方法是在Coffee或JavaScript中编写以下几行:

<%= f.fields_for :quantities, @recipe.quantities.build do |quantity| %>
  <%= f.label :amount, "Amount:" %>
  <%= f.text_field :amount %>
  <%= f.collection_select(:ingredient_id, Ingredient.all, :id, :name) %>
<% end %>

我是一个新手,因此请耐心等待,但是您是否尝试过在适当的控制器函数中使用render :foo而不是redirect_to :foo


我用茧解决了

<%= form_for @recipe do |f| %>
  <div class="field">
    <%= f.label :name %>
    <br/>
    <%= f.text_field :name %>

    <%= f.fields_for :quantities do |quantity| %>
      <%= render 'quantity_fields', :f => quantity %>
    <% end %>
    <div class="links">
      <%= link_to_add_association 'add', f, :quantities %>
    </div>
  </div>
  <%= f.submit %>
<% end %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM