Итак, ваша актуальная проблема в вашем цикле:
<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)
.