我正在构建一个类别菜单,可以在Rails中使用:remote => true
进行更新,而无需重新加载页面。
我的new
操作已成功呈现为javascript,并且更改显示在页面上,但我的create
操作似乎已成功呈现,但未显示在页面上。当我重新加载页面时,我可以看到更改,因此我知道创建操作正在运行。它只是javascript似乎没有正确呈现页面。但是,如果我查看Firebug中POST
请求的响应,我可以看到预期的更改。
请帮忙。我已经花了好几个小时在StackOverflow上试图找到解决方案。
我的类别控制器
class CategoriesController < ApplicationController
def new
@category = Category.new()
end
def create
@category = Category.new(category_params)
if @category.save
redirect_to(:controller => 'apps', :action => 'index')
else
render('new')
end
@categories = Category.where(:parent_id => nil)
end
def update
@category.update_attributes(category_params)
end
private
def category_params
params.require(:categories).permit(:name, :parent_id)
end
end
我的应用控制器
class AppsController < ApplicationController
def index
@category = nil
@categories = Category.where(:parent_id => nil)
@apps = App.all
respond_to do |format|
format.html
format.json
format.js
end
end
def new
@app = App.new()
end
def create
@app = App.new(params[:id])
if @app.save
redirect_to(:action => 'index')
else
render('new')
end
end
private
def apps_params
params.require(:apps).permit(:name, :category, :image)
end
end
创建表单(部分)
<%= simple_form_for :categories, remote: true,
:url => url_for(:action => 'create', :controller => 'categories'),
:method => 'post' do |f| %>
<%= f.input :name %>
<% end %>
Create.js.erb
$('#categories-list').html("<%= j (render 'catList') %>");
$('#category-form').slideUp(350);
_catList.html.erb
<li class="pure-menu-heading">Categories</li>
<% @categories.each do |cat| %>
<li class="pure-menu-item"><a href="#" class="pure-menu-link"><span class="email-label-personal"></span><%= cat.name %></a></li>
<% end %>
答案 0 :(得分:0)
解决!
我发现有些人在另一个论坛上帮助我。
我所要做的就是删除
redirect_to(:controller => 'apps', :action => 'index')
在类别控制器