0

在 ActionView 中,我需要根据条件显示属性。

<%= f.text_field :regmax_remote, {
  :class => 'span2', 
  :style => "display:#{@event.regmax_remote.present? ? "block" : "none"};"
} 
%> 

有没有更漂亮的方法来解决这个问题?

4

2 回答 2

1

上面的代码很好,如果你打算只使用一次,

但如果这将在许多地方使用,那么你可能需要帮助

def event_display_style event
  event.regmax_remote.present? ? "block" : "none"
end

如果您有多个基于多个条件的属性,那么您可以使用帮助程序以哈希格式返回属性并像这样使用它。

<%= f.text_field :regmax_remote, event_display_style(@event) %>

如果你想要一个带有默认散列的变量散列,那么你也可以做这样的事情

<%= f.text_field :regmax_remote, {class: "span2"}.merge(event_display_style(@event)) %>

还有一些其他方法可以使这段代码看起来更好。你可能也喜欢 draper gem。它提供了对显示的面向对象的控制,同时可以访问视图助手。

https://github.com/drapergem/draper

于 2013-04-03T11:21:37.527 回答
0

你可以尝试如下,

<% if (@event.regmax_remote.present?) %>
  <%= f.text_field :regmax_remote, class: "span2" %>
<% end %>

不要复制相同的内容,只需根据您的代码进行编辑并将其用作示例。

于 2013-04-03T10:07:44.697 回答