未定义的方法在哪里调用?
Where is undefined method called?
我有一个 decisions
资源,它嵌套在 groups
资源下。 has_many
和 belongs_to
已在模型中定义。
resources :groups do
resources :decisions
end
...我在这条路径上有一个编辑表单:
/groups/:group_id/decisions/:id/edit(.:format)
我在 Rspec 测试中遇到错误:
Failure/Error: put :update, {:id => decision.to_param, :decision =>
valid_attributes, group_id: decision.group.id}, valid_session
NoMethodError:
undefined method `decision_url' for #DecisionsController:0x007ffeb23482e0>
当我在我的开发环境中导航到表单时,我遇到了类似的错误:
<%= link_to 'Edit', edit_group_decision_path(@group, @decision) %>
NoMethodError at /groups/6/decisions/5/edit
undefined method `decision_path' for #<#:0x007fd1ff569130>
我正在使用 'better_errors'
gem,它引用了 form_for
的第一行作为无方法错误:
<%= form_for(@decision) do |f| %>
我的代码中没有任何地方 'decision_url'
。我错过了什么? form_for
难道不应该知道将更新放在哪里吗?它的有效路径位于:
/groups/:group_id/decisions/:id(.:format)
这是日志中看起来最令人兴奋的部分:
Rendered decisions/_form.html.erb (6.5ms)
Rendered decisions/edit.html.erb within layouts/application (7.1ms)
Completed 500 Internal Server Error in 9ms (ActiveRecord: 0.1ms)
NoMethodError - undefined method `decision_path' for #<#<Class:0x007fd5d98527b0>:0x007fd5d400d618>:
actionpack (4.2.3) lib/action_dispatch/routing/polymorphic_routes.rb:220:in `polymorphic_method'
actionpack (4.2.3) lib/action_dispatch/routing/polymorphic_routes.rb:134:in `polymorphic_path'
actionview (4.2.3) lib/action_view/helpers/form_helper.rb:466:in `apply_form_for_options!'
actionview (4.2.3) lib/action_view/helpers/form_helper.rb:434:in `form_for'
您已经像这样指定了嵌套资源:
resource groups do
resource decisions
end
然而,应该使用符号指定路由,如下所示:
resource :groups do
resource :decisions
end
确保您的模型也定义了正确的关系:
class Group < ActiveRecord::Base
has_many :decisions
end
class Decision < ActiveRecord::Base
belongs_to :group
end
这是它抱怨的 decision_url
调用:
if @decision.update(decision_params)
format.html { redirect_to @decision), notice: 'Decision was successfully updated.' }
将 @decision
更改为 group_decision_path(@group, @decision)
修复了它。
我有一个 decisions
资源,它嵌套在 groups
资源下。 has_many
和 belongs_to
已在模型中定义。
resources :groups do
resources :decisions
end
...我在这条路径上有一个编辑表单:
/groups/:group_id/decisions/:id/edit(.:format)
我在 Rspec 测试中遇到错误:
Failure/Error: put :update, {:id => decision.to_param, :decision => valid_attributes, group_id: decision.group.id}, valid_session NoMethodError: undefined method `decision_url' for #DecisionsController:0x007ffeb23482e0>
当我在我的开发环境中导航到表单时,我遇到了类似的错误:
<%= link_to 'Edit', edit_group_decision_path(@group, @decision) %>
NoMethodError at /groups/6/decisions/5/edit
undefined method `decision_path' for #<#:0x007fd1ff569130>
我正在使用 'better_errors'
gem,它引用了 form_for
的第一行作为无方法错误:
<%= form_for(@decision) do |f| %>
我的代码中没有任何地方 'decision_url'
。我错过了什么? form_for
难道不应该知道将更新放在哪里吗?它的有效路径位于:
/groups/:group_id/decisions/:id(.:format)
这是日志中看起来最令人兴奋的部分:
Rendered decisions/_form.html.erb (6.5ms)
Rendered decisions/edit.html.erb within layouts/application (7.1ms)
Completed 500 Internal Server Error in 9ms (ActiveRecord: 0.1ms)
NoMethodError - undefined method `decision_path' for #<#<Class:0x007fd5d98527b0>:0x007fd5d400d618>:
actionpack (4.2.3) lib/action_dispatch/routing/polymorphic_routes.rb:220:in `polymorphic_method'
actionpack (4.2.3) lib/action_dispatch/routing/polymorphic_routes.rb:134:in `polymorphic_path'
actionview (4.2.3) lib/action_view/helpers/form_helper.rb:466:in `apply_form_for_options!'
actionview (4.2.3) lib/action_view/helpers/form_helper.rb:434:in `form_for'
您已经像这样指定了嵌套资源:
resource groups do
resource decisions
end
然而,应该使用符号指定路由,如下所示:
resource :groups do
resource :decisions
end
确保您的模型也定义了正确的关系:
class Group < ActiveRecord::Base
has_many :decisions
end
class Decision < ActiveRecord::Base
belongs_to :group
end
这是它抱怨的 decision_url
调用:
if @decision.update(decision_params)
format.html { redirect_to @decision), notice: 'Decision was successfully updated.' }
将 @decision
更改为 group_decision_path(@group, @decision)
修复了它。