【问题标题】:has_one nested routes and route error message: "No route matches [POST] "/users/3/profiles""has_one 嵌套路由和路由错误消息:“没有路由匹配 [POST]“/users/3/profiles””
【发布时间】:2012-07-05 01:39:00
【问题描述】:

提交“创建我的个人资料”后出现错误

路由错误

没有路由匹配 [POST] "/users/3/profiles"

其次,我重新启动了 webbrick cli = "rails s",并且在输入“http://localhost:3000/users/1/profile/new”后收到错误消息“未定义的方法 `user_profiles_path'”。显然我使用了“resource :profile”非嵌套资源。我正在撕扯我的头发,这些错误发生了什么?

<h1>About You</h1>
<div class="row">
  <div class="span6 offset3">
    <%= form_for ([@user, @profile]) do |f| %>
      <%= f.label :name, "First name:" %>
      <%= f.text_field :name %>
      <%= f.label :surname, "Surname:" %>
      <%= f.text_field :surname %>
      <%= f.submit "Create my profile", class: "btn btn-large btn-primary" %>
    <% end %>
  </div>
</div>

  resources :users do
    resource :profile
  end

     user_profile POST   /users/:user_id/profile(.:format)      profiles#create
 new_user_profile GET    /users/:user_id/profile/new(.:format)  profiles#new
edit_user_profile GET    /users/:user_id/profile/edit(.:format) profiles#edit
                  GET    /users/:user_id/profile(.:format)      profiles#show
                  PUT    /users/:user_id/profile(.:format)      profiles#update
                  DELETE /users/:user_id/profile(.:format)      profiles#destroy
            users GET    /users(.:format)                       users#index
                  POST   /users(.:format)                       users#create
         new_user GET    /users/new(.:format)                   users#new
        edit_user GET    /users/:id/edit(.:format)              users#edit
             user GET    /users/:id(.:format)                   users#show
                  PUT    /users/:id(.:format)                   users#update
                  DELETE /users/:id(.:format)                   users#destroy
         sessions POST   /sessions(.:format)                    sessions#create
      new_session GET    /sessions/new(.:format)                sessions#new
          session DELETE /sessions/:id(.:format)                sessions#destroy
             root        /                                      static_pages#home

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 routes form-for


    【解决方案1】:

    据我了解,rails 无法知道form_for ([@user, @profile])(假设@profile 是一条新记录)是通过动词POST 路由到/users/:user_id/profile 还是/users/:user_id/profiles。一般来说,它会采用复数形式,所以如果你想要单数形式,你必须通过写作明确告诉它

    form_for @profile, url: user_profile_path(@user)
    

    【讨论】:

    • 谢谢 - 这让我的笔记本电脑免于从窗口启动。有点奇怪的是 form_for 无法从模型关联中找出正确的目标!
    猜你喜欢
    • 2014-09-04
    • 1970-01-01
    • 2014-03-26
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多