Rails将动作渲染创建为Javascript,但不会显示在页面上

时间:2015-04-28 00:01:03

标签: javascript ruby-on-rails ajax ruby-on-rails-4

我正在构建一个类别菜单,可以在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 %>

1 个答案:

答案 0 :(得分:0)

解决!

我发现有些人在另一个论坛上帮助我。

我所要做的就是删除 redirect_to(:controller => 'apps', :action => 'index') 在类别控制器