2014-11-05 92 views
0

在我的show view中,我有一些不需要用户填写的属性。在我的节目我观点可以很容易地创建一个条件,像这样:只显示Rails中存在的属性

<% if @user.occupation.present? %> 
    <p><%= @user.occupation %></p> 
<% end %> 

但是,如果我有3个或更多这些可选属性,从而为他们每个人多条件语句可能会变得非常乏味。我认为做这样的事情,但事实证明,该方法是attribute私营:

<% @user.attributes.map do |attribute, name| %> 
    <% if @user.attributes.present? %> 
    <p><b><%= name %>:</b> <%= @user.attribute %></p> 
    <% end %> 
<% end %> 

为了安全起见,我没有必要试图从被私人改变属性的方法,但越是这样只是在寻找一种方式列出已经排满在我的模型的属性。

回答

1
<% @user.attributes.each do |key, value| %> 
    <% if value.present? %> 
    <p><b><%= key %>:</b> <%= value %></p> 
    <% end %> 
<% end %> 
+0

对于你的第一个解决方案,我得到了错误'错误的参数数目(0 1)' – 2014-11-05 16:47:13

+0

这是'@ user.send(属性)',而不是'@ user.send(:属性)'。我在两种情况下都修复了代码。 – 2014-11-05 16:48:00

+0

我现在发现的唯一的事情就是它只能识别属性的值而不是名称。因此,它读取“John Doe:John Doe”,它应该在其中读取“name:John Doe” – 2014-11-05 16:52:10