2012-03-07 3 views
0

これで、生徒が利用可能なアポイントメントのテーブルから教授とのアポイントメントを選択できるようにしようとしています。 「選択」を押すと、テーブルからすべてのappointment_idが取得され、選択した予定を示すテーブルの最初の番号が入力されます。したがって、予定ID5を選択する代わりに、2、4、5、6が選択されます。次に、選択された予定表に2が入力されます。私がそれをしたいのは、私が実際に選んだ予定を選ぶことです。 HERE1つのアポイントメントの代わりにアポイントメントの配列を選択しています

は(私は必要なコードを含むよ)MY appointments_available図である:HERE

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

は予定コントローラは(再び、すべてのコードがある)IS:

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命名規則を使用してデフォルトに準拠させることは、通常、よりクリーンです。例えば、これは、Rails 1スタイルのコントローラとアクション宣言の代わりに 'appointment_path(@appointment)'とすることができます。また、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 

あなたはavailableのスコープを持っている場合は、あなたがAppointment.availableを呼び出すことができるように私はあなたのモデルにそれを移動したい、メソッド名appointments_availableを使用。

編集アクションでは、_by_idを見つける必要はありませんでした。

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

しかし、あなただけのリソースを考えると、私の変更は、すべての正直で、RESTがどのように動作するかを理解し、そしておそらく一般的なモデルが設定だろうかを確認するために足場を生成するために、必ず実装を開始する前ほとんどの時間あなたの状況では、通常のRESTfulアクションが使用されます。

あなたの行動に何か違う名前を付けるのはルールに似ていませんが、あなたはRailsの賛美されたデザインによって多くの慣習を失います。

足場を作った後、rake routesを実行してルートを覗いてみると、ルートにはどのようなオプションがあるかがわかります。たとえば、コントローラーにeditアクションがある場合、edit_appointmentルートもあります。このルートは、編集する予定を次のように渡すことで使用できます。edit_appointment_path(@appointment)

+0

IT WORKS !!ありがとうございました! – user1179269

関連する問題