bra*_*ahn 221 ruby-on-rails partials
我是一个坏孩子,并在我的部分模板中使用以下语法来设置局部变量的默认值,如果在渲染部分时未在:locals哈希中显式定义值 -
<% foo = default_value unless (defined? foo) %>
Run Code Online (Sandbox Code Playgroud)
直到最近,这似乎工作正常(当时我无法辨别)未通过的变量开始表现得好像它们被定义为nil(而不是未定义).
正如SO上各种乐于助人的人所指出的,http://api.rubyonrails.org/classes/ActionView/Base.html表示不使用
defined? foo
Run Code Online (Sandbox Code Playgroud)
而是使用
local_assigns.has_key? :foo
Run Code Online (Sandbox Code Playgroud)
我正在尝试修改我的方法,但这意味着要更改很多模板.
可以/我应该提前充电并在所有模板中进行此更改吗?我需要注意什么诡计?我需要多努力地测试每一个?
jon*_*nii 319
我这样做:
<% some_local = default_value if local_assigns[:some_local].nil? %>
Run Code Online (Sandbox Code Playgroud)
Pab*_*ero 153
既然local_assigns是哈希,你也可以使用fetch和optional default_value.
local_assigns.fetch :foo, default_value
Run Code Online (Sandbox Code Playgroud)
default_value如果foo没有设置,这将返回.
警告:
小心local_assigns.fetch :foo, default_value何时default_value是一个方法,因为它将被调用以便将结果传递给它fetch.
如果你default_value是一个方法,你可以将它包装在一个块中:local_assigns.fetch(:foo) { default_value }以防止在不需要时调用它.
hgm*_*mnz 84
怎么样
<% foo ||= default_value %>
Run Code Online (Sandbox Code Playgroud)
这说" foo如果它不是零或真,则使用.否则分配default_value给foo"
gam*_*mov 10
我想这应该在这里重复一遍(来自http://api.rubyonrails.org/classes/ActionView/Base.html):
如果需要确定某个局部变量是否已在特定渲染调用中分配了值,则需要使用以下模式:
<% if local_assigns.has_key? :headline %>
Headline: <%= headline %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
测试使用定义?标题不起作用.这是一个实施限制.
我知道这是一个旧线程,但这是我的小贡献:我会local_assigns[:foo].presence在部分内的条件中使用。然后我foo只在渲染调用中需要时设置:
<%= render 'path/to/my_partial', always_present_local_var: "bar", foo: "baz" %>
Run Code Online (Sandbox Code Playgroud)
在这里查看官方 Rails 指南。从 RoR 3.1.0 开始有效。
就我而言,我使用:
<% variable ||= "" %>
Run Code Online (Sandbox Code Playgroud)
在我的部分。
我不知道那是否好,但是对我来说还可以
| 归档时间: |
|
| 查看次数: |
75890 次 |
| 最近记录: |