Ответ 1
Вы используете text_field
для ссылки на существующий объект, здесь select
с параметрами Sports as будет более уместным.
Здесь он должен быть изменен:
<div class="field">
<%= f.label :sport %><br />
<%= f.text_field :sport %>
</div>
To:
<div class="field">
<%= f.label :sport %><br />
<%= f.select :sport_id, options_for_select(Sport.all.map{|s|[s.name, s.id]}) %>
</div>
f.select
будет генерировать поле выбора в HTML, варианты будут иметь все виды спорта в вашей БД.
Некоторая документация об этом:
- http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/select
- http://guides.rubyonrails.org/form_helpers.html#select-boxes-for-dealing-with-models
Чистым способом было бы установить переменную @sports
в вашем контроллере и вызвать ее в ваших представлениях:
# in controller
def edit
@sports = Sport.scoped
#...
# in edit view
<div class="field">
<%= f.label :sport %><br />
<%= f.select :sport_id, options_for_select(@sports.map{ |s| [s.name, s.id] }) %>
</div>
Дополнительная информация:. Если вы хотите "предварительно выбрать" вариант для выбора, вы должны передать его в качестве второго аргумента помощника options_for_select
:
options_for_select(@sports.map{ |s| [s.name, s.id] }, params[:sport_id])
# this will select by default the option that matches the value of params[:sport_id]