rails 中的网页模板(layouts)

rails中的网页模板

rails 中的模板都放在app/views/layouts/下。模板后缀是rhtml和erb都可以,但以erb为先,如果已有一个erb后缀的模板,则不再找rhtml。

模板留给子页显示的地方用yield来标识,如<%= yield %>,这样子也内容都会在这个位置显示。

rails自动是按名称来套的。比如如果模板名字叫application.erb,那rails默认把它当作全局模板,站内所有页面都会套用这个模板。

如 果把名字命名成controller的名字,如controller say,如果命名成say,则默认controller say下的所有页面都会应用这个模板。如果定义的模板名称既不是application,又不是controller名称,怎么让某一页面套用这个模板 呢?在controller中定义可以实现。比如模板页叫speak.erb,而想让controller say下所有页是套用,则在say的controller类内声明下:

layout ’speak’

这样rails会在layouts目录寻找这个文件。

如果想用代码控制根据条件使用不同的模板,则可以定义一个方法(名称随意):

def GetLayOut

          if XX return ’say’ else return ’speak’ end

end

然后把类内的声明换成这个方法的名字(注意加冒号):

layout :GetLayout

注意这个不带引号,说明不是字符串了。

如果针对某个action使用特定的模板,则可以在action内声明。比如有个action是/say/langEN,想试用speak,而say下其他页则可能不用,则在action langEN下定义如下:

render:layout => ’speak’

这样就可以使这个action套用speak模板了。

render:layout=>也可以指定方法来使用模板,不过要注意在=>要跟冒号,然后再跟方法名。

注意:layout 和rander:layout=>是两个专有命令,前者在class内声明,后者在action内声明,不可混用。

总结下:

全局模板:名称固定:application
controller模板:名称固定,同controller名称。
自定义模板(名字同controller不同),包括4种定义方法:
3.1. 在controller中定义:
         3.1.1. layout ‘模板名’(注意中间没冒号,模板名两边有引号,表示文件名)
         3.1.2 layout :方法名(注意中间有冒号,方法名两边没引号,标识方法)
3.2 在 action中定义:
          3.2.1. render:layout=> ‘模板名’(注意中间没冒号,模板名两边有引号,表示文件名)
         3.2.2 render:layout=>:方法名(注意中间有冒号,方法名两边没引号,标识方法)
这样细分起来可以算作六种方法可实现。

你可能感兴趣的:(layout)