У меня есть модель с наследованием одной таблицы в столбце type
:
class Pet < ActiveRecord::Base
TYPES = [Dog, Cat, Hamster]
validates_presence_of :name
end
Я хочу предложить выпадающий список <select>
на новых и редактируемых страницах:
<% form_for @model do |f| %>
<%= f.label :name %>
<%= f.text_input :name %>
<%= f.label :type %>
<%= f.select :type, Pet::TYPES.map { |t| [t.human_name, t.to_s] } %>
<% end %>
Это дает мне следующую ошибку:
ActionView::TemplateError (wrong argument type String (expected Module))
Я прочитал предложение использовать псевдоним для поля #type
, так как Ruby считает, что зарезервированное слово совпадает с #class
. Я пробовал оба
class Pet < ActiveRecord::Base
...
alias_attribute :klass, :type
end
и
class Pet < ActiveRecord::Base
...
def klass
self.type
end
def klass=(k)
self.type = k
end
end
Ни сработало. Какие-либо предложения? Как ни странно, он отлично работает на моей машине (MRI 1.8.6 на RVM), но не работает на промежуточном сервере (MRI 1.8.7 не на RVM).