我知道in-place editing是件事。但是我该如何进行创建。
我将items
与某个类别相关联。如果我希望页面显示类别x中的所有项目,并且让用户能够从类别页面添加新项目,并且类别更新中的项目列表将显示添加的所有项目,而不是页面做了全面刷新我将如何做到这一点?
这种东西有宝石吗?
答案 0 :(得分: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
视图中。它应该工作,虽然可能需要调整一点。