轨3,如何添加一个视图,不使用相同的布局作为rest的应用程序?

我无法find关于如何构build我的应用程序的任何文档或示例,以允许同一控制器中的不同视图使用完全不同的布局和样式表。

我们的应用程序是脚手架,然后我们使用漂亮的发电机生成的意见,然后添加deviseauthentication。 我们有两个模型的视图和控制器:小部件和公司。

我目前有一个布局:layouts / application.html.haml,我没有看到引用任何地方,所以我认为(一个新手),它总是使用命名约定。

我现在需要在同一个控制器中添加几个视图(对于移动浏览器),它们具有不同的样式表和布局(例如,右上angular没有login/注销链接)。

如何做到这一点?

默认情况下, layouts/application.html.haml.erb如果你不使用haml)。

实际上,可以根据控制器或每个操作设置布局文件,而不是每个视图,每个视图文件夹。

有几种情况:

要更改所有控制器的默认布局文件(即使用another.html.haml而不是application.html.haml

 class ApplicationController < ActionController::Base layout "another" # another way layout :another_by_method private def another_by_method if current_user.nil? "normal_layout" else "member_layout" end end end 

要将某个控制器中的所有操作更改为使用另一个布局文件

 class SessionsController < ActionController::Base layout "sessions_layout" # similar to the case in application controller, you could assign a method instead end 

要更改操作以使用其他布局文件

 def my_action if current_user.nil? render :layout => "normal_layout" else render :action => "could_like_this", :layout => "member_layout" end end 

如果你不想太复杂,你可以简单地这样做:

 layout 'layout_one' def new @user= User.new render layout: 'landing_page' end 

这会做。

我相信这里有很多答案,但是这里有另一个你可以使用不同的控制器或每个动作的布局。

 class ListingsController < ApplicationController # every action will use the layout template app/views/layouts/listing_single.html.erb layout 'listing_single' # the 'list' action will use the layout set in the 'alternative_layout' method # you can also add multiple actions to use a different layout,just do like layout :alternative_layout, only: [:list,:another_action] layout :alternative_layout, :only => :list def show end def list end private def alternative_layout if current_user.is_super_admin? #if current use is super admin then use the layout found in app/views/layouts/admin.html.erb otherwise use the layout template in app/views/layouts/listing_list.html.erb 'admin' else 'listing_list' end end end 

是的,您可以在同一个控制器中使用不同的布局和样式表。

在布局的导轨指南是一个很好的开始。 看第3节 – 构build布局

有几种方法可以使用不同的布局,但最简单的方法之一就是在layouts/文件夹中简单地添加一个与控制器名称相同的文件。 所以如果你的控制器是PostsController那么添加一个layouts/post.html.haml会导致rails使用这个布局。 如果没有find这样的布局,并且没有指定其他布局,rails将使用layouts/application.html.haml的默认值

那么,如果移动设备是不同的观点,但所有的桌面版本都是相同的,那么你可以使用JQtouch。

http://railscasts.com/episodes/199-mobile-devices

 # config/initializers/mime_types.rb Mime::Type.register_alias "text/html", :mobile # application_controller.rb before_filter :prepare_for_mobile private def mobile_device? if session[:mobile_param] session[:mobile_param] == "1" else request.user_agent =~ /Mobile|webOS/ end end helper_method :mobile_device? def prepare_for_mobile session[:mobile_param] = params[:mobile] if params[:mobile] request.format = :mobile if mobile_device? end 

上面的代码取自Railscasts的例子。