массив встреч выбирается вместо одного - PullRequest
0 голосов
/ 07 марта 2012

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

ЗДЕСЬ МОИ назначенные_доступные ВИД (я только включаю необходимый код):

<% @appointment.each do |appointment|%>
<tr>
  <td><%= appointment.professor_id %></td>
  <td><%= appointment.student_id %></td>
  <td><%= appointment.timeslot %></td>
  <td><%= link_to 'Choose', :controller => "appointments", :action => "student_edit", :id => @appointment %></td>
</tr>
<% end %>

ЗДЕСЬ КОНТРОЛЛЕР встреч (опять же, не весь код там):

def appointments_available
  @appointment = Appointment.find_all_by_student_id("")
end

def student_edit
  @appointment = Appointment.find_by_id(params[:id])
  @appointment.update_attribute(:student_id, session[:student].user_id)
end

Любая помощь приветствуется

1 Ответ

0 голосов
/ 07 марта 2012

Итак, ваша актуальная проблема в вашем цикле:

<td><%= link_to 'Choose', :controller => "appointments", :action => "student_edit", :id => @appointment %></td>

должно быть:

<td><%= link_to 'Choose', :controller => "appointments", :action => "student_edit", :id => appointment.id %></td>

Самое главное, вы должны попытаться быть более RESTful и придерживаться стандартных действий в ваших контроллерах рельсов, ваш senario не представляет необходимости , а не следовать передовым методам.

<% @appointments.each do |appointment|%>
<tr>
  <td><%= appointment.professor_id %></td>
  <td><%= appointment.student_id %></td>
  <td><%= appointment.timeslot %></td>
  <td><%= link_to 'Choose', edit_appointment_path(appointment) %></td>
</tr>
<% end %>

Если вы перечисляете коллекцию, я бы назвал вашу переменную экземпляра множественно. Любое использование find_all_by_ вернет массив, а в вашем случае, вероятно, коллекцию из Arel. Также это, кажется, ваше действие индекса, поэтому я постараюсь использовать его как таковой.

def index
  @appointments = Appointment.all
end

Вы использовали имя метода appointments_available, если у вас есть область действия available, я бы переместил это в вашу модель, чтобы вы могли тогда позвонить Appointment.available.

В вашем действии редактирования вам не нужно было использовать _by_id find уже найдет по.

@appointment = Appointment.find(params[:id])

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

Это не то, что против правил называть ваши действия чем-то другим, но вы теряете много соглашений, предоставленных вам продуманным дизайном Rails.

После того, как вы создадите эшафот, взгляните на свои маршруты, набрав rake routes, вы увидите, какие опции у вас есть для маршрутов. Например, если у вас есть действие edit в вашем контроллере, у вас также будет маршрут edit_appointment, который вы можете использовать, передавая встречу, которую хотите изменить, следующим образом: edit_appointment_path(@appointment).

...