これがどのように行われるか知りたいです。単純なProduct
モデルがあり、あるページでリンクをクリックして、AJAX によって製品フォームを追加したいとしましょう。次に、他の製品フォームをポップアップし、最初のフォームを完成させて送信し、他のフォームにも同じことを行います。
これが私が使用するコードです。
インデックスページでは、リンクから商品フォームを追加、作成、一覧で見ることができます。
製品/index.html.erb
<h1>Products</h1>
<%= link_to "Product", new_product_path, :remote => true %>
<div id="product_form">
<%= render 'form' %>
</div>
<ul id="products">
<%= render :partial => @products.reverse %>
</ul>
製品/_form.html.erb
<%= form_for(@product, :remote => true) do |f| %>
<%= f.text_field :name %>
<%= f.text_field :price %>
<%= f.submit %>
<% end %>
製品/_product.html.erb
<%= content_tag_for(:li, product) do %>
<p><%= product.name</p>
<p><%= product.price %></p>
<% end %>
製品コントローラー
def index
@products = Product.all
@product = Product.new
end
def create
@product = Product.new(params[:product])
respond_to do |format|
if @product.save
format.html { redirect_to products_url }
format.js
else
format.html { render action: "index" }
format.js
end
end
end
作成されると、製品が_product
部分的に表示されます。
製品/create.js.erb
$('#products').prepend('<%= escape_javascript(render(@product)) %>');
リンクをクリックすると、製品フォームが<div id="product_form">
製品/new.js.erb
$("#product-form").html("<%= escape_javascript(render(:partial => 'products/form', locals: { product: @product })) %>");
これで 1 つの製品フォームが生成されますが、同じページに他の製品フォームをレンダリングする背後にあるコード ロジックを知りたいです。これはどのように行われますか?