2016-11-17 8 views
0

Я хочу, чтобы создать форму, как, что:Рубин на рельсах и JSON для создания Выбора формы

<select> 
<option> 
</select> 

с рубином на рельсах, но для стран (и есть много стран в мире, ха-ха), поэтому я не хочу писать всех на мой взгляд, поэтому я хочу поместить файл JSON со всеми странами и получить тему в своих опциях (возможно, с каждым методом)

Я не знаю, где Я должен положить свой json-файл в свое приложение для рельсов и как его назвать, на мой взгляд,

может кто-то помочь меня ?

+0

Вам нужны 'select_tag' и' options_for_select'. Это методы рельсов. Прочтите их документы. –

+0

см. Этот вопрос для справки: http://stackoverflow.com/questions/12595327/rails-select-from-json-array – axlj

+0

Спасибо, Серджио, но я просто хочу знать, где я должен поместить свой json-файл в свое приложение ? (в какой папке) и как я должен его просить? –

ответ

1

Простейшее место для размещения вашего JSON-файла находится в том же каталоге, что и ваши контроллеры. Хотя повторное выполнение такого рода операций быстро избавит вас от вашей папки контроллеров.

После того, как вы сделали, что вы можете прочитать его из контроллера, как это:

file = File.read('./countries.json') 
countries = JSON.parse(file) 

, а затем карту страны к типу данных, что options_for_select ожидает.

Как только у вас будет такая работа, я рекомендую создать помощника, который знает, как читать json-файл, кэшировать его данные и возвращать его. Сохраните файл json в том же каталоге, что и помощник. Обратитесь к помощнику в контроллере.

Также обратите внимание: для этого требуется жемчужина JSON.

В вашем помощнике, вы хотите создать этот метод:

def countries_for_select 
    file = File.read('./countries.json') 
    countries = JSON.parse(file) 
    countries.map {|c| [ c['country']['label'], v['country']['country_code'] ] }) 
end 

.map переводит поля из ваших стран JSon объект в [[name,key], ...] массив, options_for_select предпологает.

по форме помощника на Rails Documentation, синтаксис select_tag выглядит следующим образом

<%= select_tag(:country, options_for_select(...)) %> 

, но мы уже создали помощник countries_for_select в соответствии с форматом, что select_tag ожидает. Так что все, что вам нужно сделать, это следующее:

<%= select_tag(:country, countries_for_select) %> 
+0

Спасибо за ваш ответ! Это обязано поставить это в контроллер? Я не могу сказать это? –

+1

Вы определенно хотите, чтобы это (по крайней мере) в вашем контроллере. Но я рекомендую переместить мясо логики в класс-помощник. – axlj

+1

@AntoninMrchd: __definitely__ not view. –

Смежные вопросы