模型属性的本地排序

时间:2014-02-20 17:39:23

标签: ruby-on-rails ruby

有没有人知道Rails如何在本地命令模型的属性?

我的问题是:

我有一个名为Device的模特。 在devices/show.html.erb中,我使用类似于以下内容的方式显示其属性:

<% @device.attributes.each do |k,v| %>
  <tr>
    <td><%= k %></td>
    <td><%= v %></td>
  </tr>
<% end %>

我决定在模型的属性中添加与第5个属性相关的属性,但是当我为它运行create_column迁移时,它会出现在此列表的末尾(因为它是要添加的最后一个属性) )。

我怀疑Rails按列创建时间命令它的属性,因为我试图将列移动到我的数据库中的正确位置,并在我的attr_accessible列表中更早地声明属性,但无济于事。移动schema.rb中的列并重建数据库可能会有效,但这是我无法做到的。我可以将它破解到视图中的正确位置,但我想知道是否有更好的解决方案。

如果不在整个属性列表中强制执行排序,我有什么方法可以做到这一点?

2 个答案:

答案 0 :(得分:1)

做这样的事情怎么样:

1-获取column_names(如果您不想手动执行)

column_names = Device.column_names.inject([]) { |arr,e| arr.push(e) }

2-修改您想要的订单(即您关注的列名)

3-评估每个@device

column_names.each_with_object({}) { |m, hash| hash[m] = @device.send(m) }

答案 1 :(得分:1)

通过Rails迁移,您可以指定使用:after选项添加列的位置:

add_column :your_table, :column_name, :data_type, after: :related_column

这可能会有所帮助。但是,由于这是一个表示问题,我会在帮助器中订购属性。