【发布时间】:2015-04-28 00:01:03
【问题描述】:
我正在构建一个类别菜单,可以在 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 %>
创建.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 %>
【问题讨论】:
标签: javascript ruby-on-rails ajax ruby-on-rails-4