2012-03-07 3 views
0

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

ВОТ МОЯ appointments_available VIEW (я только в том числе необходимый код):

<% @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 %> 

ВОТ назначения CONTROLLER (опять же, не весь код есть):

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

Как правило, гораздо лучше использовать правильный находчивый маршрут, объявленный в 'config/routes.rb', и использовать соглашения об именах REST-ful, чтобы они соответствовали значениям по умолчанию.Например, это может быть «destination_path (@appointment)» вместо контроллера стиля Rails 1 и объявления действия. Также использование метода GET для обновления записи, вероятно, очень плохая идея, так как некоторые браузеры будут предварительно извлекать такие ссылки и сильно закручивать все. Используйте ': method =>: post', где вы можете. – tadman

ответ

0

Итак, ваша фактическая проблема в вашей петле:

<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 найти уже найдет.

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

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

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

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

+0

ЭТО РАБОТАЕТ !! СПАСИБО! – user1179269