0

好的,所以我正在创建一个约会网站,供教授和学生登录并创建/编辑约会。我已经完成了教授方面的工作,但我正在与学生斗争。现在我正在努力让学生点击他们约会旁边的按钮,将自己从与教授的约会中删除。现在我可以轻松地删除约会 ID,约会就会消失,但我想从约会中删除 student_id,以便其他学生稍后可以选择该约会。这是我的代码:控制器:

def destroy   
if session[:professor] != nil

    @appointment = Appointment.find(params[:id])
    @appointment.destroy
end
if session[:student] != nil
@appointment = Appointment.find_by_id_and_student_id(params[:id],params[:student_id])
@appointment.destroy(params[:student_id])  
end
end

看法:

<% @appointments.each do |appointment| %>
<tr>
<td><%= appointment.professor_id %></td>
<td><%= appointment.student_id %></td>
<td><%= appointment.timeslot %></td>
<td><%= link_to 'remove appointment', appointment, confirm: 'Are you sure?', method:  
:delete %></td>
</tr>
<% end %>

如果您想查看,我已将链接包含在我的文件中。 单击此处查看我的文件。 此外,一切都发生在约会控制器中。这个问题出现在显示学生视图中(您按下删除按钮的位置)。

解决方案:好的,由于你们的帮助,我得到了它的工作。所以这就是我所做的:@appointment = Appointment.find_by_id_and_student_id(params[:id], session[:student].user_id) @appointment.update_attribute(:student_id, nil)

4

1 回答 1

0

几乎可以肯定这里的错误是 Appointment.find_by_id_and_student_id 返回 nil。像这样重构你的代码:

@appointment = Appointment.find_by_id_and_student_id(params[:id],params[:student_id])
if @appointment
  @appointment.destroy(params[:student_id])
else
  flash[:error] = 'An appointment could not be found for that student.'
end

这将防止您收到该错误,并应帮助您追查其根本原因。

于 2012-03-06T16:19:00.013 回答