2016-11-02 3 views
-1

Я новичок в рельсах и прочитал документацию по выпадающим спискам, но я все еще борется.Rails 5: заполнить раскрывающийся список из базы данных с опциями_from_collection_for_select

У меня есть база данных выглядит следующим образом:

     Table "public.lakeaddresses" 
Column |   Type   | Modifiers | Storage | Stats target | Description 
---------+-----------------------+-----------+----------+--------------+------------- 
address | character varying(40) |   | extended |    | 
city | character varying(25) |   | extended |    | 
state | character varying(20) |   | extended |    | 
zip  | integer    |   | plain |    | 
county | character varying(25) |   | extended |    | 
lake | character varying(30) |   | extended |    | 
lakeid | integer    |   | plain |    | 

Я хочу, чтобы создать выпадающий список, заполняющий имя озер, которые были бы колонки «озеро»

просмотров/Карта/индекс. html.erb

<head> 
<script src='https://api.mapbox.com/mapbox-gl-js/v0.26.0/mapbox-gl.js'>  
</script> 
<link href='/home/garrett/lakemag/app/assets/stylesheets/lakemap.css' rel='stylesheet' /> 
</head>   

<body> 
<div id='map' style='margin:0 auto; width: 1024px; height: 768px;'> 
<script> 
    mapboxgl.accessToken = 'pk.eyJ1IjoiZ3JhZmZpbmR1c3RyaWVzIiwiYSI6ImNpdXAxY2pycjAxeGoyb251dDY2emNqeXgifQ.YtJkR5Elp-oq3FaMTUlXyw'; 
    var map = new mapboxgl.Map({ 
    container: 'map', 
    style: 'mapbox://styles/graffindustries/ciursnqrv009u2js5cpedcnsr' 
    }); 
</script> 
</div> 

</br></br> 

<center> 

<% form_tag(method: "get") do %> 
    <% lake_array = Lake.all.map { |lake| [lake.name] } %> 
    <= select_tag 'Lake Name', options_for_select(lake_array) %> 
<% end %> 

</center> 
</body> 

контроллеры/map_controller.rb

def new 
@lake = Lake.all 

Ошибка получения:

ActionView::Template::Error (uninitialized constant ActionView::CompiledTemplates::Lake 
18: 
19: <center> 
20: 
21: <% form_tag(method: "get") do %> 
22: <% lake_array = Lake.all.map { |lake| [lake.name] } %> 
23: <= select_tag 'Lake Name', options_for_select(lake_array) %> 
24: <% end %> 
25: 
26: </center> 
F, [2016-11-02T06:22:04.619269 #7096] FATAL -- : [f4086edc-8de8-4b36-9b81-4a20efbde333] app/views/map/index.html.erb:21:in `_app_views_map_index_html_erb___3432893749292109102_24860500' 
+0

Не могли бы вы разместить весь файл своего вида? –

+0

Я обновил файл вида. код для карты на странице отлично работает, но как только я добавлю код для формы, он разбивает страницу. спасибо за ответ – GarrettG

ответ

0

Вместо того чтобы делать

Попробуйте установить свой массив таким образом.

<% lake_array = Map.all.map { |map| [map.lake] } %> 
<%= select_tag 'Lake Name', options_for_select(lake_array) %> 

Пожалуйста, обратите внимание, что если вы не используете form_for вы не можете использовать f.select и вместо этого использовать select_tag

Update: Вы получаете сообщение об ошибке, потому что lake выводится из map таблицы. Если у вас была модель lake.rb со столбцом таблицы name, вы могли бы сделать что-то подобное в своей консоли rails.

lake = Lake.first 
lake_name = lake.name 

Однако прямо сейчас, потому что вы не можете получить доступ к Lake.method как это, вы должны получить доступ к нему через Map вместо этого. Так, например, чтобы получить доступ к одному из ваших названий озер, в консоли ваших рельсов, вы должны это сделать.

map = Map.first 
lake_name = map.lake 
#this would return the lake that is tied to the first map object 

Надеюсь, это устранит ваши сомнения и объяснит, почему вы получаете сообщение об ошибке.

+0

Привет, я пробовал ваше решение, и теперь я получаю новую ошибку. Я обновил свой ответ на файл errorfile, а также свой файл в исходном сообщении. спасибо за то, что нашли время, чтобы ответить на мой вопрос. – GarrettG

+0

Ваша форма должна быть включена в 'form_tag', а не просто включена в ваше представление' index.html.erb'. Проконсультируйтесь с формами, а не только с тегами 'select' – angkiki

+0

Я обновил свой код представления с помощью начала и конца form_tag. не могли бы вы любезно рассказать мне, если я на правильном пути? – GarrettG

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