Rails - итерация результатов find_by в выпадающий список - PullRequest
0 голосов
/ 17 сентября 2010

Я новичок в rails и мне нужна помощь с повторением результата sql.

В моей модели есть метод, который использует find_by:

def self.find_country()
  @countries = CountryTable.find_all_by_country_status('Y', :select => "country_name")
  @countries.each do |c|
    puts "#{c.inspect}"
  end
end

Это то, что яиметь в виду:

<%= select_tag "country", options_for_select(CountryTable.find_country) %>

Тогда я получаю это неловко #вместо названия страны, отображаемого для каждой опции выбора в источнике:

<option value="#&lt;CountryTable:0x30509bc&gt;">#&lt;CountryTable:0x30509bc&gt;</option>
<option value="#&lt;CountryTable:0x3050944&gt;">#&lt;CountryTable:0x3050944&gt;</option>
<option value="#&lt;CountryTable:0x30508e0&gt;">#&lt;CountryTable:0x30508e0&gt;</option>

Я настолько новичок в рельсах, что, возможно, даже не пойду правильно.

1 Ответ

0 голосов
/ 17 сентября 2010

Даже если вы поместите оператор: select в оператор find, он все равно будет возвращать объекты класса модели (CountryTable).Вам необходимо извлечь атрибуты country_name из объектов.

Лучший способ преобразовать массив объектов путем преобразования каждого объекта - использовать map:

def self.find_country
  find_all_by_country_status('Y', :select => "country_name").map {|c| c.country_name }
end

. Это передает каждую странуfind_all_by_country_status возвращается в блок.Блок в свою очередь возвращает название страны страны.Затем map объединяет эти результаты в новый массив, и метод возвращает это.

В качестве примечания, название вашей модели, вероятно, должно быть просто "Country", а не "CountryTable".В Rails модели названы в честь объектов, которые они представляют.Поэтому, если ваша модель "Страна", каждый объект (каждая строка в таблице базы данных модели) представляет страну.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...