Есть ли жемчужина рельсов, чтобы использовать одну таблицу для всех «опций» в нескольких входах выбора в приложении? - PullRequest
0 голосов
/ 17 марта 2011

Итак, иногда вам просто нужен список опций для ваших выборов. Существует ли простая жемчужина, которая позволяет легко использовать одну таблицу для всех типов опций, которые могут быть в вашем приложении?

Эта таблица, вероятно, будет выглядеть так:

id  | type   | value  | label
01  | color  | red    | Red
02  | color  | black  | Black
03  | shape  | circle | Circle
04  | shape  | square | Square
05  | state  | texas  | Texas

Например, список стран, список штатов, список цветов, список месяцев и т. Д. *

Затем при использовании выбора:

select_tag :color, options_for_colors

Затем он заполняет выбор параметрами с значениями / метками из таблицы некоторых параметров, где строки имеют тип: color.

Это было бы достаточно легко сделать самостоятельно, но я не хочу тратить время, если оно уже построено.

обновление

Я бы хотел, чтобы это была динамическая таблица, чтобы конечный пользователь мог добавлять / удалять элементы из таблицы параметров выбора.

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Я всегда использую этот метод,

app / models / user.rb

ROLES = %w[admin author normal]

app / views / users / _form.html.erb

<%= f.collection_select :role, User::ROLES, :to_s, :titleize %>
0 голосов
/ 12 ноября 2012

Начиная с Rails 3.2, вот что я делаю в инициализаторе:

ActiveRecord::Base.class_eval do
  def self.types
    Rails.application.routes.routes.select do |r|
      r.defaults[:action]=="index" && r.defaults[:controller]== self.name.to_s.downcase.pluralize
    end.map do |r|
      r.defaults[:type]
    end.compact
  end
end

И в rout.rb я сопоставляю действия STI с контроллером родительской модели, потому что я подкован в контроллере:

  resources :derived_models, :controller => :base_model, :type => "DerivedModel"
  resources :more_derived_models, :controller => :base_model, :type => "MoreDerivedModel"

Теперь Model.types даст вам ["DerivedModel", "MoreDerivedModel"]

...