Ruby & Ruby on Rails « Как правильно создать выпадающий список при помощи form for для атрибута модели, которого нет в бд?

Всем привет! Делаю так..
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .ruby.geshi_code {font-family:monospace;} .ruby.geshi_code .imp {font-weight: bold; color: red;} .ruby.geshi_code .kw1 {color:#9966CC; font-weight:bold;} .ruby.geshi_code .kw2 {color:#0000FF; font-weight:bold;} .ruby.geshi_code .kw3 {color:#CC0066; font-weight:bold;} .ruby.geshi_code .kw4 {color:#CC00FF; font-weight:bold;} .ruby.geshi_code .co1 {color:#008000; font-style:italic;} .ruby.geshi_code .coMULTI {color:#000080; font-style:italic;} .ruby.geshi_code .es0 {color:#000099;} .ruby.geshi_code .br0 {color:#006600; font-weight:bold;} .ruby.geshi_code .sy0 {color:#006600; font-weight:bold;} .ruby.geshi_code .st0 {color:#996600;} .ruby.geshi_code .nu0 {color:#006666;} .ruby.geshi_code .me1 {color:#9900CC;} .ruby.geshi_code .re0 {color:#ff6633; font-weight:bold;} .ruby.geshi_code .re1 {color:#0066ff; font-weight:bold;} .ruby.geshi_code .re2 {color:#6666ff; font-weight:bold;} .ruby.geshi_code .re3 {color:#ff3333; font-weight:bold;} .ruby.geshi_code span.xtra { display:block; }

class House < ActiveRecord::Base
  attr_accessible ... :sell_type #в БД этого поля нету
end
 
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .ruby.geshi_code {font-family:monospace;} .ruby.geshi_code .imp {font-weight: bold; color: red;} .ruby.geshi_code .kw1 {color:#9966CC; font-weight:bold;} .ruby.geshi_code .kw2 {color:#0000FF; font-weight:bold;} .ruby.geshi_code .kw3 {color:#CC0066; font-weight:bold;} .ruby.geshi_code .kw4 {color:#CC00FF; font-weight:bold;} .ruby.geshi_code .co1 {color:#008000; font-style:italic;} .ruby.geshi_code .coMULTI {color:#000080; font-style:italic;} .ruby.geshi_code .es0 {color:#000099;} .ruby.geshi_code .br0 {color:#006600; font-weight:bold;} .ruby.geshi_code .sy0 {color:#006600; font-weight:bold;} .ruby.geshi_code .st0 {color:#996600;} .ruby.geshi_code .nu0 {color:#006666;} .ruby.geshi_code .me1 {color:#9900CC;} .ruby.geshi_code .re0 {color:#ff6633; font-weight:bold;} .ruby.geshi_code .re1 {color:#0066ff; font-weight:bold;} .ruby.geshi_code .re2 {color:#6666ff; font-weight:bold;} .ruby.geshi_code .re3 {color:#ff3333; font-weight:bold;} .ruby.geshi_code span.xtra { display:block; }

    <%= f.label :sell_type %>
    <%= f.select :sell_type, [
            [1,1],
            [2,2]
    ] %>
 

В итоге получаю ошибку:

undefined method `sell_type' for #<House:0xb5cf6c54>
 

Как правильно сделать выпадающий список?
И где лучше всего хранить данные для них если не во вьюхе?

1 ответов


Нужно использовать attr_accessor вместо attr_accessible. Первый добавляет методы для чтения и записи атрибутов. Второй указывает какие атрибуты можно массово обновлять (например через object.update_attributes)


Если я правильно понял вопрос, то надо получить выпадающий список, значение которого не пишется в БД?
Тогда так, например:


class House < ActiveRecord::Base
  #Создадим константу со списком значений.
  SELL_TYPES = [
   'Значение 1',
   ...
   "Значение 100500"
  ]
  #:sell_type в модели не упоминаем ибо не для модели, видимо, оно...
end
 


<%= label_tag :sell_type %>
    <%= select_tag 'sell_type', options_for_select(House::SELL_TYPES.each_with_index.collect { |v, i| [v, i] }), :include_blank => false
 %>
 

После отправки формы в контроллер смотри значение списка в переменной params и...