2016-01-20 113 views
1

我知道in-place editing是一件事情。但是我如何去创造。Rails:就地编辑是一件事情,但就地创建是什么?

我有items关联到一个类别。如果我想要一个页面显示类别x中的所有项目,并让用户能够使用类别更新中的项目列表从类别页面向该类别添加新项目以显示全部添加的新项目页面进行全面更新我将如何去做这件事?

这种类型的东西有没有宝石?

+1

我认为用ajax添加数据会做你的工作。 – chaitanya

+1

是的,如果没有宝石或其他已知方法,ajax会是我的选择。 – Rob

+1

解决方案是AJAX调用。你必须使用JavaScript来完成这项工作。 –

回答

0

是的宝石被称为Cocoon(如果你有nested fields)。

-

它的工作(手动)这样:

#config/routes.rb 
resources :posts do 
    resources :categories, only: [:new, :destroy] #-> url.com/posts/:post_id/categories 
end 

#app/controllers/posts_controller.rb 
class PostsController < ApplicationController 
    def show 
     @post = Post.find params[:id] 
    end 
end 

#app/controllers/categories_controller.rb 
class CategoriesController < ApplicationController 
    respond_to :js, :html, only: :new 

    def new 
     @post = Post.find params[:post_id] 
     @post.categories.build 
    end 

    def destroy 
     @post = Post.find params[:post_id] 
     @category = Category.find params[:id] 

     @post.categories.delete @category 
    end 
end 

#app/views/categories/new.js.erb 
$category = $("<%=j render "form", locals: { post: @post } %>"); 
$($category.html()).appendTo(".categories"); 

#app/views/categories/_form.html.erb 
<%= form_for post do |f| %> 
    <%= f.fields_for :categories, child_index: Time.now.to_i do |category| %> 
     <%= category.text_field :x %> 
    <% end %> 
<% end %> 

#app/views/categories/new.html.erb 
<%= form_for @post, remote: true do |f| %> 
    <div class="categories"> 
     <%= f.fields_for :categories do |category| %> 
      <%= category.text_field :x %> 
     <% end %> 
    </div> 
    <%= link_to post_new_categories_path(@post), remote: true %> 
    <%= f.submit %> 
<% end %> 

这将新的项目添加到通过AJAX你posts#show视图。它应该工作,虽然可能需要调整一点。

+1

看起来不错我会给它一个镜头,看看它是否能完成这项工作 – Rob

+0

看起来不会有效。我需要2个不同的表格。 1.保存类别和另一个轻松添加新项目。这一切都在一个表单提交 – Rob