Ruby on rails 向Rails中的布局发送数据的最佳实践是什么
我想知道什么是将数据从控制器高效地发送到布局的最佳方式。通常,我使用带有yield指令的布局来呈现页面。这就是我的布局Ruby on rails 向Rails中的布局发送数据的最佳实践是什么,ruby-on-rails,Ruby On Rails,我想知道什么是将数据从控制器高效地发送到布局的最佳方式。通常,我使用带有yield指令的布局来呈现页面。这就是我的布局 <!DOCTYPE HTML> <html lang="en"> <head> <%= yield(:title) %> </head> <body> <%= yield %> </body> </html> 和视图文件 <% content_
<!DOCTYPE HTML>
<html lang="en">
<head>
<%= yield(:title) %>
</head>
<body>
<%= yield %>
</body>
</html>
和视图文件
<% content_for :title do %>
<title><%= @title %></title>
<% end %>
<section id="page-body">
<!-- CONTENT GOES HERE -->
</section>
使用这种方法,我必须在视图中需要@title数据的每个方法的控制器中定义@title实例变量
真正的问题是,我的标题和其他元数据存储在数据库中,因为视图使用相同的布局文件。因此,我认为这些数据(如标题和关键字)不应该加载得太频繁(至少,不是在每个方法中),也不应该在每个视图中声明内容
那么布局有没有办法直接从控制器访问这些数据呢?不使用内容_
谢谢有两种方法:
ApplicationController
控制器 如果您是来自
ApplicationController
的控制器,则始终会调用ApplicationController
。这意味着,如果您想/需要从数据库中设置值,可以使用before_action
回调:
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :set_meta
private
def set_meta
@title ||= ...
end
end
我们使用了其中一个gem来填充此数据:
#config/settings.yml
site:
title: <%= Option.find_by name: "title" %>
keywords: <%= Option.find_by name: "keywords" %>
#app/views/layouts/application.html.erb
<title><%= yield(:title) || Settings.title %></title>
#config/settings.yml
地点:
标题:
关键词:
#app/views/layouts/application.html.erb
#config/initializers/meta.rb
META = {
title: Option.find_by name: "title"
keywords: Option.find_by name: "keywords"
}
#config/settings.yml
site:
title: <%= Option.find_by name: "title" %>
keywords: <%= Option.find_by name: "keywords" %>
#app/views/layouts/application.html.erb
<title><%= yield(:title) || Settings.title %></title>