Кто-нибудь знает, как 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
и восстановление базы данных, вероятно, будут работать, но этого я не могу сделать. Я мог бы взломать его в нужное место в представлении, но мне интересно, есть ли лучшее решение в первую очередь.
Есть ли способ, которым я могу это сделать без принудительного упорядочения по всему списку атрибутов?
Это просто просит неприятностей; закажите их сами, прежде чем представить их взгляду, иначе вы будете во власти любой конкретной версии, которая решит их заказать. –
Ой, имея что-то зависящее от n-й позиции столбца, звучит как действительно плохая идея. Как вы заметили, вы не можете гарантировать порядок/позицию (не без большого количества обезьян, и даже тогда я не буду на это полагаться). Я думаю, вам лучше описать конкретный сценарий, который вы пытаетесь выполнить с этим заказом; мы, вероятно, можем помочь вам найти гораздо более безопасное решение. –
Я не собирался полагаться на какое-либо упорядочение атрибутов этой модели (за исключением согласованности с представлением), поэтому я не особо беспокоился о том, чтобы быть во власти решений по упорядочению атрибутов, принятых конкретными версиями. Очевидно, что это (очень немного) изменилось, поэтому я представлю для этого представление для представления. Спасибо – ricky116