Модель Rails без таблицы
Я хочу создать список выбора, который позволяет говорить цвета, но не хочет создавать таблицу для цветов. Я видел его где угодно, но не могу найти его в google.
Мой вопрос: как я могу поместить цвета в модель без таблицы базы данных?
Или есть ли лучший способ рельсов для этого?
Я видел, как кто-то помещал массив или хэш непосредственно в модель, но теперь я не мог его найти.
Ответы
Ответ 1
class Model
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :whatever
validates :whatever, :presence => true
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
attr_accessor создаст ваши атрибуты, и вы создадите объект с помощью initialize() и установите атрибуты.
Сохраненный метод подскажет, что с базой данных нет ссылки. Вы можете найти такие примеры:
http://railscasts.com/episodes/219-active-model?language=en&view=asciicast
Что объяснит вам логику.
Ответ 2
Самый простой ответ - просто не подкласс ActiveRecord:: Base. Затем вы можете просто написать свой объектный код.
Ответ 3
Ответы прекрасны для 2013 года, но теперь рельсы 4 извлекли все независимые от базы данных функции из ActiveRecord
в ActiveModel
. Кроме того, там есть удивительное официальное руководство.
Вы можете включить столько модулей, сколько хотите, или как мало.
В качестве примера вам просто нужно include ActiveModel::Model
, и вы можете отказаться от такого метода initialize
:
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
Просто используйте:
attr_accessor :name, :age
Ответ 4
Если вы хотите иметь список выбора (который не развивается), вы можете определить метод в своем ApplicationHelper
, который возвращает список, например:
def my_color_list
[
"red",
"green",
"blue"
]
end