从另一个控制器渲染控制器操作

use*_*913 25 routing rendering ruby-on-rails ruby-on-rails-3

我认为代码更明确

选项A.

class RedirectController < ApplicationController
  def index
    redirect_to :controller => 'posts', :action => 'show', :id => 1
    # it works
  end
end
Run Code Online (Sandbox Code Playgroud)

选项B.

class RedirectController < ApplicationController
  def index
    render :controller => 'posts', :action => 'show', :id => 1
    # it doesn't work
  end
end
Run Code Online (Sandbox Code Playgroud)

(B)可以在另一个控制器中加载另一个动作吗?(而不只是视图)怎么样?谢谢

Boh*_*dan 45

嗨尝试render 'posts/show'render :template => 'posts/show'

  • 你可以使用`:layout =>`选项强制布局 (2认同)
  • 这会渲染与路由“posts/show”关联的内容,它不会渲染来自 #posts 控制器的 #show 操作。这是两个完全不同的想法,而且经常重叠。 (2认同)

Dee*_*ale 7

只需渲染模板即可

def index
  render 'posts/show'
end
Run Code Online (Sandbox Code Playgroud)

这个也可以用

def index
  render template: 'posts/show'
end
Run Code Online (Sandbox Code Playgroud)

如果你想以其他布局渲染

def index
  render template: 'posts/show', layout: 'different_layout' 
end
Run Code Online (Sandbox Code Playgroud)