选择一系列约会而不是一个约会

时间:2012-03-07 00:17:06

标签: ruby-on-rails arrays update-attributes

好的,所以我试图允许学生从可用约会表中选择与教授的约会。当我按“选择”时,它从表中获取所有的appointment_id,然后将第一个数字放在显示所选约会的表中。因此,它不是选择约会ID 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 :(得分: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并坚持使用rails控制器中的标准操作,而您的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路由,如下所示:{{1 }}