2012-06-30 112 views
0

我很想知道这是如何完成的。假设我有一个简单的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 %> 

的ProductsController

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 })) %>"); 

现在这生成一个产品表单,但我想知道代码逻辑behin d在同一页面上呈现其他产品表单。这将如何完成?

回答

0

通常我用代表产品集合的第二个对象来做这件事。如果它适合您的业务逻辑(类似于ProductCategory或ShoppingCart)或者具有保存每个相关产品的保存方法的简单ActiveModel“Products”,则它可以是主动记录。

Active Presenter可以给你这个机制的更多细节,但我不会使用那个宝石,因为它的活动是相当低的。

相关问题