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_id編集アクションでは、find already will find byを使用する必要はありませんでした。

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

しかし、私の変更を実装し始める前に、REST がどのように機能するかを理解し、一般的なモデルがどのようにセットアップされるかを確認するための足場を生成することを忘れないでください。 .

アクションに別の名前を付けることはルールに反することではありませんが、Rails の独断的な設計によって与えられた多くの規則を失うことになります。

足場を作成したら、 を実行してルートを確認すると、rake routesルートのオプションが表示されます。たとえばedit、コントローラーにアクションがある場合、edit_appointment次のように編集する予定を渡すことで使用できるルートも作成されますedit_appointment_path(@appointment)

于 2012-03-07T00:23:55.420 に答える