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

私はこの問題で 3 日間苦労しましたが、理由は聞かないremote: trueでください。どうなるかを確認するために、リンクからコマンドを削除しました。リンクをクリックすると、アプリがキャッチされ、認証の問題が発生しました。

このアプリで承認を処理するために CanCan を使用しています。これが私の能力ファイルでした。

アプリ/モデル/能力.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 はコントローラーがこのアクションを実行するのをブロックしており、パーシャルが読み込まれていませんでした。

アビリティファイルを次のように変更しました。

アプリ/モデル/能力.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 に答える