Зависимая от Rails форма - выбор определенного элемента из модели - PullRequest
0 голосов
/ 01 апреля 2012

Я новичок в Rails, так что будьте осторожны.У меня есть модель 'Event' со следующей информацией: 'sport', 'home_team', 'away_team' и 'time' в datetime.

Теперь я хочу разрешить пользователю«следить» за конкретным событием, и я пытаюсь найти лучший способ сделать это.В идеале мне нужна форма с зависимыми выпадающими списками.Например, пользователь сначала выбирает «день», затем «спорт», а затем выбирает из соответствующего списка «события» этого «дня» и «спорт».Эта ассоциация затем сохраняется в богатой таблице соединений, называемой «следующим».

Я видел учебные пособия по сложным формам, включающим несколько моделей, но что делать, когда все из одной модели?Как создать форму, чтобы получить горстку соответствующих записей.У меня есть только несколько отличных значений для «спорта», поэтому я не был уверен, имеет ли смысл придавать ему собственную модель.И могу ли я легко получить события на определенную дату из значения datetime?

1 Ответ

0 голосов
/ 01 апреля 2012

Есть много способов сделать это, вот один из вариантов: Так как вы хотите увидеть несколько событий, вы, вероятно, начнете фокусироваться на действии индекса. Начните с создания и индексирования действия, но добавьте несколько хуков для его фильтрации, т.е.

def index
  if params[:sport]
    @events = Event.where("sport = ?",params[:sport])
  else
    @events = Event.all()
  end
end

Теперь, если вы определили свои маршруты следующим образом:

ресурсов: события

У вас будет маршрут / события, которые примут запрос на получение и направят вас к действию index.

Но если вам нужна форма, в которой вы можете выбирать вещи, форма будет по умолчанию POST, но вы можете создать форму, которая ПОЛУЧИТ '/ events'

т.е. в приложении / views / events / index.html.erb

<%= form_tag '/events', :method=>:get  %>

Затем вы хотите создать элементы формы, которые будут отправлять параметры.

т.е.

<%= select_tag 'sport', '<option>baseball</option><option>football</option>' %>

Вставить кнопку отправки

<%= submit_tag 'See Events'

Затем "конец" вашей формы с

<% end %>

Теперь, когда вы нажмете кнопку «Просмотр событий», вы отправите запрос на получение маршрута «/ events», и в действии индекса появится параметр «sport», фильтрующий события.

Чтобы все было просто и все в виде индекса, после вашей формы вы бы перечислили все события.

<% @events.each do |e| %>
  Sport: <%= e.sport %><br/>
  Home Team: <%= e.home_team %><br/>
  Away Team: <%= e.away_team %><br/>
  Time: <%= e.time.strftime('%H %M') %><br/>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...