0

好的,所以我试图让学生从可用约会表中选择与教授的约会。当我按“选择”时,它会从表中取出所有的约会 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

任何帮助表示赞赏

4

1 回答 1

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 控制器中的标准操作,您的场景并不代表不需要遵循最佳实践。

<% @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_idfind 已经可以找到。

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

但是在您开始实施我的更改之前,请务必了解 REST 是如何工作的,并且可能会生成一个脚手架以查看如何设置通用模型,老实说,在大多数情况下考虑资源时,您的情况将使用常规 RESTful 操作.

将您的操作命名为不同的名称并不违反规则,但是您会丢失 Rails 固执己见的设计赋予您的许多约定。

制作脚手架后,通过运行查看您的路线rake routes,您会看到路线有哪些选项。例如,如果您edit的控制器中有一个操作,您还将有一个edit_appointment路由,您可以通过将要编辑的约会传递给它来使用它,如下所示edit_appointment_path(@appointment)

于 2012-03-07T00:23:55.420 回答