Как мне получить значения таблицы поиска в окне выбора? - PullRequest
1 голос
/ 20 августа 2009

Читая вместе с гибкой книгой, в сноске написано:

... Вы просто передаете помощнику выбора результат выполнения поиска (: все) в своем поиске Таблица.

Хорошо ...

<%= f.select :source, Source.find(:all) %>

Мой контроллер источника (и, следовательно, таблица) выглядит так:

create_table :sources do |t|
  t.string :source

  t.timestamps
end

Но мое поле выбора - беспорядок, я получаю данные этого типа во всех значениях и отображает:

#<Source:0x23a2bfc>

Итак, я попытался сделать Source.find(:all, :select => 'name,id'), но это все равно дает мне странные вещи.

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 20 августа 2009

Вам необходимо передать набор опций (или опций ключ-значение). Третий параметр в select фактически передается методу options_for_select. Это лучше всего иллюстрируется на примере.

options_for_select(["a", "b"])

... становится

<option>a</option><option>b</option>

В большинстве случаев вас больше интересуют пары ключ-значение

options_for_select([["a", "1"], ["b", "2"]])

... становится

<option value="1">a</option><option value="2">b</option>

В качестве краткости обычно пропускают всю коллекцию объектов и отображают их в соответствии с тем, что ожидает options_for_select.

options_for_select(Model.all.map { |m| [m.attr1, m.attr2] })

... и ответить на ваш вопрос, используя метод select внутри представления

<%= f.select(:method, Model.all.map { |m| [m.attr1, m.attr2] }) %>
3 голосов
/ 20 августа 2009
Source.find(:all)

вернет массив объектов Source - это не то, что вам нужно. То, что вы хотите, это массив опций. Что-то как :

select(:source, "source_id", Source.all.collect {|p| [ p.source, p.id ] })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...