Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 在布局和模板之间传递局部数据变量_Ruby_Middleman - Fatal编程技术网

Ruby 在布局和模板之间传递局部数据变量

Ruby 在布局和模板之间传递局部数据变量,ruby,middleman,Ruby,Middleman,我需要能够共享本地数据(在一个yaml文件)从模板布局。我希望能够在模板中加载相关的YAML数据,然后可以从布局(以及相关的部分)访问这些数据。这可能吗 我发现这似乎表明这是可能的,通过一些shennaigans,但我不能让它工作,这似乎黑客。是否有一种内置方式在模板和布局之间传递数据?如果没有,这篇博文中的黑客攻击能奏效吗 更新:现在以代码为特色 下面是上面链接的博客文章中的代码。我一模一样地试了试,玩了一会儿,但没有掷骰子 # in your layout file (inside layo

我需要能够共享本地数据(在一个yaml文件)从模板布局。我希望能够在模板中加载相关的YAML数据,然后可以从布局(以及相关的部分)访问这些数据。这可能吗

我发现这似乎表明这是可能的,通过一些shennaigans,但我不能让它工作,这似乎黑客。是否有一种内置方式在模板和布局之间传递数据?如果没有,这篇博文中的黑客攻击能奏效吗

更新:现在以代码为特色

下面是上面链接的博客文章中的代码。我一模一样地试了试,玩了一会儿,但没有掷骰子

# in your layout file (inside layout/ folder):
<% myvar = yield_content :myvar %>
<% myvar = eval(myvar.to_str) %>

# in your template file (e.g., mypage.html.erb):
<% content_for :myvar, data.somefile %>

# this examples assumes there's a somefile.yml in your data/ folder:
name: hello world
tag: the quick brown jumps over the lazy dog
它在模板内工作正常,但布局抛出
未定义的局部变量
错误

如果将YAML加载到布局中,则在模板中无法访问YAML,但情况正好相反。此外,我不希望在布局中加载数据,因为它将根据它来自的模板而有所不同


理想情况下,我只需将加载的YAML数据从模板传递到布局,但我认为如果该布局是为哪个博客(它是一个多博客站点)调用的,我也可以实现我的最终目标。然而,在与中间商团队中的一些人交谈后,route似乎不是一个选项。

事实证明,要将数据从模板传递到布局,只需声明一个实例变量。因此,对于YAML数据,如我所做的:

# In your template
<% @my_var = YAML.load_file("path/to/data.yml") %>

# In your layout
<p>My_var contains: <%= @my_var %></p>
模板中的
#
#在您的布局中
My_var包含:

我不知道这是否是显而易见的,如果你熟悉中间人下面的工具链,或者它是否在某个地方的文档中,我只是找不到它,但这就是它的全部


非常感谢您投下这颗知识炸弹。

您能发布一些代码吗?当您可以从布局中访问时,您的意思是什么?YAML文件中的数据是否总是最新的?所谓“可从布局访问”,我的意思是我希望布局包含模板知道的数据。示例:模板包含博客文章的作者信息,然后版面中有一个包含该作者信息的侧栏。布局需要知道模板中声明的作者信息。作为或“永远是最新的”,我不确定你的确切意思,但我的直觉是,是的,它会是。这个YAML文件中的数据不会经常更改。最好使用
@data
而不是
data
我不敢相信它会这么简单。非常感谢你。从今天起,我将以最高荣誉唱出@DD1919的名字。顺便说一句,在模板中设置此逻辑操作不是一个好方法,更好地放置控制器或助手声音非常好,认为如果有一种方法来评估变量会很好吗?比如说,你在yaml文件中添加了一个部分路径,这将是一个很好的预处理内容。
# In your template
<% @my_var = YAML.load_file("path/to/data.yml") %>

# In your layout
<p>My_var contains: <%= @my_var %></p>