0

Deviseを使用しています。ログエントリのコレクションを更新しています。

私のルートは次のようになります:

  devise_for :users


  resources :users do
    resources :exercises do
      resources :log_entries
    end
  end

私もフォームを手に入れましたStarted PUT "/users/1/exercises/1/log_entries"

次に、次のエラーが発生しました。

Routing Error

No route matches [PUT] "/users/1/exercises/1/log_entries"

編集:問題が何であるかわかります。log_entriesのコレクションを更新しようとしています。つまり、POSTではなくPUTをヒットしています。Railsにはコレクションを配置する方法がないため、これを解決する方法がわかりません。

x2を編集:これを実行しようとしている理由は、現在、これを実行するフォームがあるためです。

        = semantic_form_for [current_user, ew.exercise] do |exercise|

フォームの中にはlog_entriesのコレクションがあります。5つあるとしましょう。

次に、各log_entryを更新するか、さらに動的に追加します。彼らはexercise_controllerにヒットし、私はuser_idを次のようにハック的な方法で設定することを余儀なくされました。

params[:exercise][:log_entries_attributes].each do |value|
  value[1].merge!(:user_id => current_user.id)
end

私がやりたいのはlog_entriesコントローラーを押すことなので、上記を行う必要はありません。これをトリッキーにするのは、コレクションを適切に処理することです。

4

1 に答える 1

3

おそらくあなたは行方不明です

new_user_exercise_log_entry(@user,@exercises)

ネストされたリソースの場合、プレーンとは呼べませんnew_user_exercise_log_entry()

===更新===

:url => user_exercise_log_entries_path(current_user、ew.exercise)

する必要があります

:url => user_exercise_path(current_user、ew.exercise)

于 2012-08-18T00:01:57.463 に答える