3

一連のコントローラーからレンダリングする共有 js 応答 (ビュー) が必要です。に住んでいapp/views/shared/success.js.erbます。

これは、一部のコンテンツで DOM を変更する、ほとんどのコントローラーの標準的な応答です。ただし、このコンテンツは、それをレンダリングするコントローラーに固有のものです。

問題は、この共有 js ビューから特定のコントローラーのビュー パスを解決する方法がわからないことです。彼は一例です(いくつかの名前空間のコントローラーが含まれています)

# app/controllers/users_controller.rb
class UsersController < ActionController::Base
  def create
    # do some stuff
    render 'shared/success' # .js.erb
  end
end

# app/controllers/settings/permissions_controller
class Settings::PermissionsController < ActionController::Base
  def create
    # do some stuff
    render 'shared/success' # .js.erb
  end
end

# app/views/users/success.html.erb
<p>Some View code that only relates to <strong>users</strong></p>

# app/views/settings/permissions/success.html.erb
<p>Some View code that only relates to <strong>permission settings</strong></p>

# app/views/shared/success.js.erb
var listItem = '<%= j render "#{insert resolved path to this particular controller instance}/success.html.erb" %>'
$(".list").append(listItem);

私がこれをやりたい理由は、js の応答が常に同じであるためです。変化するのはコンテンツだけです。現在のコントローラーのデフォルトのビュー レンダリング パスを取得する方法について何か考えはありますか?

4

1 に答える 1

0

次を使用して、現在のアクション名にアクセスできます。

params[:action]  

次に、それに応じてビューをカスタマイズできます。

または、これらのコントローラーで.jsビューに期待する値を使用してインスタンス変数を設定し、それをビューで使用することもできます。

于 2012-04-19T10:21:23.990 に答える