有没有人知道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
中的列并重建数据库可能会有效,但这是我无法做到的。我可以将它破解到视图中的正确位置,但我想知道是否有更好的解决方案。
如果不在整个属性列表中强制执行排序,我有什么方法可以做到这一点?
答案 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
这可能会有所帮助。但是,由于这是一个表示问题,我会在帮助器中订购属性。