为什么我没有获得正确输出到rake路由的嵌套资源的路由匹配?

时间:2012-08-17 23:55:56

标签: ruby-on-rails routing devise nested-attributes

我正在使用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集合。所以它击中了PUT而不是POST。我不知道如何解决这个问题,因为Rails没有提供PUT集合的方法。

编辑x2:我尝试这样做的原因是因为我目前有一个表单可以执行此操作:

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

表单内部是log_entries的集合。假设有5个。

现在我更新每个log_entry或动态添加更多内容。他们点击了exercise_controller,我被迫以一种hackish的方式设置user_id,如下所示:

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

我想要做的是点击log_entries控制器,所以我不必执行上述操作。让这件事变得棘手的是正确地进行了收集。

1 个答案:

答案 0 :(得分:3)

可能你错过了

new_user_exercise_log_entry(@user,@exercises)

对于嵌套资源,您无法调用普通new_user_exercise_log_entry()

=== update ===

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

应该是

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