为什么我的部分请求,使用:remote不起作用?

时间:2013-03-28 12:56:27

标签: ajax ruby-on-rails-3 partial-views cancan

我正在创建一个简单的Rails应用程序,作为我的项目的基础应用程序,在用户编辑配置文件页面中,我无法通过异步请求加载部分。

以下是编辑个人资料页面的基本视图:

应用/视图/用户/ edit.html.haml

container-fluid
  .row-fluid
    .span3
      .well
        %ul.nav.nav-pills.nav-stacked
          %li.nav-header Profile
          %li
            = link_to 'Personal Infos', 'settings', remote: true

我在控制器上的设置操作:

应用/控制器/ users_controller.erb

...

def settings
  @user = User.find(params[:id])
  respond_to do |format|
    format.js
  end
end

...

应用/视图/用户/ settings.js.erb

$('div#settings_body').html("<%= escape_javascript(render('edit_profile'))%>")

最后,我的部分:

应用/视图/用户/ _edit_profile.html.haml

= form_for(@user) do |f|
  = f.text_field :email
  = f.submit "Save"

但是,当我点击“个人信息”链接时,没有任何反应。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我在这个问题上挣扎了三天 - 并且不要问我原因 - 我从链接中删除了remote: true命令以查看会发生什么。当我点击链接然后,我的应用程序被捕获并且授权问题。

我正在使用CanCan处理此应用中的授权,这是我的能力文件:

应用/模型/ ability.rb

class Ability
  include CanCan::Ability

  def initialize(resource)
    if resource.is_a?(User)
     can [:read, :edit], User, :id => resource.id
    end
  end

end

问题是我向用户控制器添加了一个新操作 settings ,CanCan阻止控制器运行此操作,并且部分未加载。

我改变了我的能力档案如下:

应用/模型/ ability.rb

class Ability
  include CanCan::Ability

  def initialize(resource)
    if resource.is_a?(User)
     can [:read, :edit, :settings], User, :id => resource.id
    end
  end

end

它有效。