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

我们的应用程序是搭建起来的,然后我们使用漂亮的生成器生成视图,然后添加Desive进行身份验证.我们有两个模型的视图和控制器:小部件和公司.

我目前只有一个布局:布局/应用程序.html.haml,我看不到任何地方引用过它,所以我(rails新手)认为它总是被命名约定使用.

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

怎么能做到呢?

推荐答案

默认情况下为layouts/application.html.haml(如果不使用haml,则为.erb).

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

很少有这样的情况:

To change the default layout file for all controller (ie. use another.html.haml instead of 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

Ruby-on-rails相关问答推荐

未捕获语法错误:try 编辑TRIX时,请求的模块未在Rails 7.1中提供名为默认的导出(在youtube.js:1:8)

如何将Form_With用于多个没有控制器的型号

Web控制台不会出现在例外页面Rails 7.1.1上

引用连接 Rails 表中枚举的查询

根据表单内的 Select 字段值渲染部分内容

select2 未应用于所有下拉列表;它只适用于数据的最后一条记录

Rails 7:加载所有刺激控制器

在 Ruby on Rails html.erb 文件中循环

Rails 4 中的 null_session 和 reset_session 有什么区别?

Rails:用于创建固定长度 char(12) 列的迁移

Rails 将字符串与视图中的变量连接的最佳方法

Rails 模型方法 self.与普通

如果 URL 不存在,请将 http(s) 添加到 URL?

从控制器中删除 Cookie

Ruby on Rails:在模型中验证还是在数据库中验证更好?

对象不支持此属性或方法 Rails Windows 64bit

ActiveRecord 查找以

Rails:为什么 with_exclusive_scope 受保护?关于如何使用它的任何好的做法?

Ruby 更新后:测试失败,assets资源 未声明为在生产中预编译

在 Rails 3 中突出显示当前页面的最佳方法? -- 有条件地将css类应用于链接