1

私のアプリでは、時間リンクをクリックしたときに、がstudentに属しているかどうかを切り替えています。training time

# controller
def time
  @student = Student.find(params[:student_id])
  @time = TrainingTime.find(params[:training_time_id])
  @student.toggle_time(@time)
  respond_to do |format|
    format.html { redirect_to @student }
    format.js
  end
end

# routes
resources :students do
  match "time/:training_time_id", to: "students#time", as: :toggle_time
end

# view
<%= link_to t.time_format, student_toggle_time_path(@student, t), remote: true %>

現在、matchを使用して動作していますが、これを設定する適切な方法とその理由は何ですか?

ご入力いただきありがとうございます。

4

1 に答える 1

8

セマンティクスがすべてです。GETリソースをフェッチする、リソースPOSTを作成するPUT(またはPATCH、これらは問題について議論されています)、リソースを更新する、リソースDELETEを削除する。

正直に言うと、それについても議論がPOSTありPUTます。しかし、Webサーバーは通常GETPOST(パラメーターを介してエミュレートされる他の動詞の動作)のみを処理するため、私はあまり気にせず、上記の内容に固執する傾向があります。

あなたはリソースを作成していないように見えるので、意味的に言えば、PUTあなたが探しているものです。

についてmatchは、rails 3.Xで、キャッチオール=>すべての動詞がルートで一致します。を使用して制限できますmatch 'something', via: [:get, :post]。Rails 4では、デフォルトでは何も実行されません。処理される動詞について明示的にする必要があります。

于 2013-02-19T13:30:38.300 に答える