如何从Rails控制器显式声明视图?

时间:2008-11-07 15:49:52

标签: ruby-on-rails

我想从我的控制器显式调用一个视图。

现在我有:

def some_action
  .. do something ...
  respond_to do |format|
    format.xml
  end
end

...然后它调用我的some_action.xml.builder视图。我该怎么称呼其他观点?在respond_to中是否有参数我不见了?

谢谢,

JP

6 个答案:

答案 0 :(得分:39)

您可以使用渲染执行以下操作:

respond_to do |format|
    format.html { render :template => "weblog/show" }
end

答案 1 :(得分:14)

有关控制渲染内容的不同方法,请参阅Rendering section of the ActionController::Base documentation

你可以让Rails像这样渲染一个特定的视图(模板):

# Renders the template located in [TEMPLATE_ROOT]/weblog/show.r(html|xml) (in Rails, app/views/weblog/show.erb)
  render :template => "weblog/show"

# Renders the template with a local variable
  render :template => "weblog/show", :locals => {:customer => Customer.new}

答案 2 :(得分:5)

如果更方便的话,您也可以传递:action或:controller。

respond_to do |format|
    format.html { render :action => 'show' }
end

答案 3 :(得分:5)

或者更简单,因为Rails > 3.0

render "edit"

答案 4 :(得分:2)

您可以在控制器中执行此操作来修改控制器的内部lookup_context

before_filter do
  lookup_context.prefixes << 'view_prefix'
end

并且在查找列表中的所有其他视图前缀后,控制器将在响应view/view_prefix/show.html请求时尝试加载show。默认列表通常为application和当前控制器的名称。

class MagicController
  before_filter do
    lookup_context.prefixes << 'secondary'
  end

  def show
    # ...
  end
end

app.get '/magic/1`

GET请求将按以下顺序查找视图:

  • view/application/show.erb
  • view/magic/show.erb
  • view/secondary/show.erb

并使用第一个找到的视图。

答案 5 :(得分:0)