別のコントローラーアクションをレンダリングする必要があります<%= render "controller/index" %>
そして私はこのエラーを受け取ります
{:formats => [:html]、:locale => [:en、:en]、:handlers => [:rjs、:rhtml、:rxml、:erb、:builder]}の部分的なコントローラ/インデックスがありませんパスの表示 "/ path_to/app/views"
クライアントにリダイレクトを送信せずに、別のコントローラーアクションをビューにレンダリングするにはどうすればよいですか?私はもう試した
<%=render :action => "index", :controller=>"controller" %>
しかし、それは機能していないようです。
テンプレートをレンダリングしてみてください:
<%= render :template => "controller/index" %>
またはファイル:
<%= render :template => "#{Rails.root}/app/controllers/controller/index" %>
そして、私はあなたがそれがより便利である限り、あなたはそれをコントローラを通してレンダリングするべきだと信じています:
def your_action
...
render :action => :index
end
これは私にとってうまくいきます:
def renderActionInOtherController(controller,action,params)
controller.class_eval{
def params=(params); @params = params end
def params; @params end
}
c = controller.new
c.request = @_request
c.response = @_response
c.params = params
c.send(action)
c.response.body
end
次に、
render :text => renderActionInOtherController(OtherController,:otherAction,params)
基本的には、他のクラスをハックし、その「params」メソッドを上書きして返します
Rails 4を使用している場合:
def renderActionInOtherController(controller,action,params)
c = controller.new
c.params = params
c.dispatch(action, request)
c.response.body
end
Railsガイドから page :
:actionでrenderを使用することは、Rails初心者にとってしばしば混乱の元になります。指定されたアクションは、レンダリングするビューを決定するために使用されますが、Railsはコントローラーでそのアクションのコードを実行しません。ビューで必要なインスタンス変数は、レンダーを呼び出す前に現在のアクションで設定する必要があります。
つまり、別のアクションをレンダリングすることはできません。レンダリングできるのは別のテンプレートだけです。共有コードを取得して、アプリケーションコントローラーのメソッドに移動できます。他の方法でコードを実際に構成できない場合は、この行に沿って何かを試すこともできます。
# This is a hack, I'm not even sure that it will work and it will probably
# mess up your filters (like ignore them).
other_controller = OtherController.new
other_controller.request = @_request
other_controller.some_action
他のコントローラー(/モデル)のview
をレンダリングするだけでなく、action
(メソッド)を呼び出す場合は、Ruby生き方-このメソッドをmodule
に入れ、必要なコントローラに含めます。
他のコントローラーに触れるより「不気味」ではないと思います。
module StandardActions
def show_user_homepage(local_params=params)
#something finding
#something to check
render :"homepage/show"
def
end
class AddressesController < ApplicationController
include StandardActions
def update
# update address
if ok
show_user_homepage(id: user_id)
else
#errorthings
render :edit #(eg.)
end
end
end
class HobbiesController < ApplicationController
include StandardActions
def update
# update hobby
if ok
show_user_homepage(id: user_id)
else
#errorthings
render :edit #(eg.)
end
end
end