最近初学 Slim,很喜欢它精简的代码。所以,想把《Ruby on Rails Tutorial》中的代码使用 slim 再来实现一遍。熟悉一下 slim 的使用。在进行到第三章时遇到一个问题。百思不得其解。发出来,希望熟悉的朋友帮忙解答一下。谢谢!
应用中每个视图的 Title 都有一部分相同,一部分不同。将相同部分提取到 application.html.slim 中,将不同部分定义到每一个模板文件中,然后在 application.html.slim 中调用该变量来实现每个视图显示不同的 Title。
书中的源代码是使用 erb 来实现的。关键的两端代码如下:
application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Ruby on Rails Tutorial Sample App | <%= yield(:title) %></title>
<%= stylesheet_link_tag "application", media: "all",
"data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<%= csrf_meta_tags %>
</head>
<body>
<%= yield %>
</body>
</html>
home.html.erb
<% provide(:title, 'Home') %>
<h1>Sample App</h1>
<p>
This is the home page for the
<a href="http://railstutorial.org/">Ruby on Rails Tutorial</a>
sample application.
</p>
我自己实现的代码中,模板文件使用 slim 来实现。具体代码如下:
application.html.slim
doctype html
html
head
title Ruby on Rails Tutorial Sample App | #{yield(:title)}
= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true
= javascript_include_tag "application", "data-turbolinks-track" => true
= csrf_meta_tags
body
= yield
home.html.slim
- title = 'Home'
h1 Sample App
p
| This is the home page for the
a href="http://railstutorial.org/" Ruby on Rails Tutorial
| sample application
正常情况下,每个页面的title
标签应该会根据模板文件第一行定义的title
变量来显示不同的名称。但是,现在的情况确实显示不了。所以,有两个问题:
如何在模板文件中定义变量?如下的方式,在同一个文件可以使用上面#{title}
调用。但是,在application.html.slim
中这样调用就会报没有定义该变量。
- title = 'Home'
如何在 application.html.slim 中调用模板文件定义的变量?如下的方式,经过测试。不行,输出为空。
title Ruby on Rails Tutorial Sample App | #{yield(:title)}
Ch03-StaticPages
分支上。昨晚@hpyhacking 亮哥已经说了,最好不要在模板文件中定义变量。 我们先解决这个问题, 然后再讨论最佳实践。谢谢!