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>
Как правильно сделать выпадающий список?
И где лучше всего хранить данные для них если не во вьюхе?
/** * 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
<%= 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 и...