Rails 嵌套资源路由错误
Rails nested resource routing error
我的嵌套资源出现路由错误。这是我的嵌套路由:
resources :users do
resources :pages
end
这是我的迷你测试"visit new user page"系统测试:
test "visit new user page path" do
user = User.create
visit new_user_page_path(user)
assert_selector "h1", text: "Page"
end
失败并出现以下错误:
Error:
PagesTest#test_visit_new_user_page_path:
ActionView::Template::Error: undefined method `pages_path' for #<#<Class:0x00007fa0299dfa28>:0x00007fa02aa23df8>
Did you mean? image_path
app/views/pages/_form.html.erb:1:in `_app_views_pages__form_html_erb__3658586168370814469_70162960780560'
app/views/pages/new.html.erb:3:in `_app_views_pages_new_html_erb__3548077654233884011_70162934875400'
我意识到 pages_path 不是此嵌套资源 的正确路径。 pages#new 的正确路径是 new_user_page_path(@user)(这是我到达 new.html.erb)。 pages#create 的正确路径是 POST 到 user_pages_path(@user)(这是页面new.html.erb 应该 POST 到)。但我无法在任何地方找到 pages_path 被调用的地方。该错误表明它在 new.html.erb 和 _form.html.erb 中被调用。这是那些页面。首先,new.html.erb:
<h1>New Page</h1>
<%= render 'form', page: @page %>
<%= link_to 'Back', user_pages_path(@page) %>
和_form.html.erb:
<%= form_with(model: page, local: true) do |form| %>
<% if page.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(page.errors.count, "error") %> prohibited this page from being saved:</h2>
<ul>
<% page.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= form.label :title %>
<%= form.text_field :title, id: :page_title %>
</div>
<div class="field">
<%= form.label :content %>
<%= form.text_area :content, id: :page_content %>
</div>
<div class="field">
<%= form.label :user_id %>
<%= form.text_field :user_id, id: :page_user_id %>
</div>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
我不知道 pages_path 在哪里被调用,所以我无法修复该错误。感谢任何帮助。
您需要更改您的表单代码,page_path 是从它调用的。应该是
<%= form_with(model: [ @user, @page ]) do |form| %>
在这种情况下,路线将被正确设置。
我的嵌套资源出现路由错误。这是我的嵌套路由:
resources :users do
resources :pages
end
这是我的迷你测试"visit new user page"系统测试:
test "visit new user page path" do
user = User.create
visit new_user_page_path(user)
assert_selector "h1", text: "Page"
end
失败并出现以下错误:
Error:
PagesTest#test_visit_new_user_page_path:
ActionView::Template::Error: undefined method `pages_path' for #<#<Class:0x00007fa0299dfa28>:0x00007fa02aa23df8>
Did you mean? image_path
app/views/pages/_form.html.erb:1:in `_app_views_pages__form_html_erb__3658586168370814469_70162960780560'
app/views/pages/new.html.erb:3:in `_app_views_pages_new_html_erb__3548077654233884011_70162934875400'
我意识到 pages_path 不是此嵌套资源 的正确路径。 pages#new 的正确路径是 new_user_page_path(@user)(这是我到达 new.html.erb)。 pages#create 的正确路径是 POST 到 user_pages_path(@user)(这是页面new.html.erb 应该 POST 到)。但我无法在任何地方找到 pages_path 被调用的地方。该错误表明它在 new.html.erb 和 _form.html.erb 中被调用。这是那些页面。首先,new.html.erb:
<h1>New Page</h1>
<%= render 'form', page: @page %>
<%= link_to 'Back', user_pages_path(@page) %>
和_form.html.erb:
<%= form_with(model: page, local: true) do |form| %>
<% if page.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(page.errors.count, "error") %> prohibited this page from being saved:</h2>
<ul>
<% page.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= form.label :title %>
<%= form.text_field :title, id: :page_title %>
</div>
<div class="field">
<%= form.label :content %>
<%= form.text_area :content, id: :page_content %>
</div>
<div class="field">
<%= form.label :user_id %>
<%= form.text_field :user_id, id: :page_user_id %>
</div>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
我不知道 pages_path 在哪里被调用,所以我无法修复该错误。感谢任何帮助。
您需要更改您的表单代码,page_path 是从它调用的。应该是
<%= form_with(model: [ @user, @page ]) do |form| %>
在这种情况下,路线将被正确设置。