代码之家  ›  专栏  ›  技术社区  ›  JP Richardson

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

  •  19
  • JP Richardson  · 技术社区  · 16 年前

    现在我有:

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

    ... 然后调用some_action.xml.builder视图。我怎样才能称之为其他视图?是否有一个参数在我丢失的响应_中?

    太平绅士

    6 回复  |  直到 16 年前
        1
  •  42
  •   Kevin Kaske    16 年前

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

    respond_to do |format|
        format.html { render :template => "weblog/show" }
    end
    
        2
  •  15
  •   Gabe Hollombe    16 年前

    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}
    
        3
  •  7
  •   Fellow Stranger    12 年前

    Rails > 3.0 :

    render "edit"
    
        4
  •  5
  •   Cameron Price    16 年前

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

    respond_to do |format|
        format.html { render :action => 'show' }
    end
    
        5
  •  2
  •   Nate    10 年前

    您可以修改内部设置 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

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