新手来自Microsoft MVC3 + razor。
说我有:
<% if foo %>
<%= bar %>
<% end %>
我有办法吗?
<% if foo
magic_function_that_goes_to_output_buffer bar
end %>
这个功能是否存在?
编辑: 为了绝对清楚,我正在寻找一个我可以在&lt; %%&gt;内多次使用的解决方案。块。在&lt;%=%&gt;之间找到解决方案块只会改变问题。
“不”的答案是可以接受的,因为我可以不再为它烦恼而继续前进。
接受解决方案: 我的application_helper看起来像
def out(content)
@output_buffer.safe_concat(content)
end
我的观点看起来像
prevReview = nil
@review.each do |review|
out render :partial => 'review',
:locals => { :review => review, :showDate => (prevReview.nil? ? true : prevReview.updated_at === review.updated_at) }
prevReview = review
end
答案 0 :(得分:1)
确实如此,试试这个:
<%= bar if foo %>
编辑:
你也可以这样做:
<%= if true
"true"
else
"false"
end %>
但是如果你涉及很多逻辑,你应该更好地使用帮助器。所以在你帮助文件中:
def magic_function_that_goes_to_output_buffer(condition)
if condition
"true"
else
"false"
end
end
在您看来:
<%= magic_function_that_goes_to_output_buffer(foo) %>
答案 1 :(得分:1)
是的,有办法。
但在我说出来之前,请不要这样做,除非你有充分的理由。这是因为您将被绑定到可能随时更改的实现细节。
只需发布针对您特定问题的新问题,您肯定会得到很好的答案。
这是:
<% if foo
@output_buffer.concat("any string will do")
bar = call_what_you_want
@output_buffer.concat(bar.to_s)
end
%>
好的,这在Rails 2.x上运行良好但是使用Rails 3你会连接到一个安全的输出缓冲区,所以你应该在@output_buffer变量上调用#safe_concat而不是#concat。
答案 2 :(得分:0)
也许你想看看haml。 haml代码看起来更干净,更时尚。
<% if foo %>
<%= bar %>
<% end %>
此erb代码转换为:
- if foo
= bar
这就是全部。几个有用的链接haml site和haml-rails plugin page。祝你好运!