1

我正在创建一个简单的 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"

但是当我点击“个人信息”链接时,什么也没有发生。我究竟做错了什么?

4

1 回答 1

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

问题是我向用户控制器添加了一个新的操作设置,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

它奏效了。

于 2013-03-28T12:56:27.160 回答