ruby-on-rails - 嵌套路由和 form_for 和 NoMethodError

标签 ruby-on-rails ruby-on-rails-3 controller form-for nested-resources

如下所述的错误消息,我没有使用“user_profiles_path”作为复数,因为我在嵌套资源中定义了“resource :profile”。

NoMethodError in Profiles#new

显示/home/smileymike/rails_projects/bffmapp_v2/app/views/profiles/new.html.erb 第 20 行出现的地方:

undefined method `user_profiles_path' for #<#<Class:0x90266ac>:0xa041294>

型号:

class User < ActiveRecord::Base
  has_one :profile

class Profile < ActiveRecord::Base
  attr_accessible :name, :surname
  belongs_to :user

路线.rb:

  resources :users do
    resource :profile  (note: has_one)
  end

查看:profiles/new.html.erb

<div class="row">
  <div class="span6 offset3">
    <%= form_for([@user, @profile]) do |f| %>
      <%= f.label :name %>
      <%= f.text_field :name %>

      <%= f.label :surname %>
      <%= f.text_field :surname %>

      <%= f.submit "Create my profile", class: "btn btn-large btn-primary" %>
    <% end %>
  </div>
</div>

路线

    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
           signup        /signup(.:format)                      users#new
           signin        /signin(.:format)                      sessions#new
          signout DELETE /signout(.:format)                     sessions#destroy
             help        /help(.:format)                        static_pages#help
            about        /about(.:format)                       static_pages#about
          contact        /contact(.:format)                     static_pages#contact

Controller :

class ProfilesController < ApplicationController
    def show
    end

  def new
    @user = current_user
    @profile = current_user.build_profile()
  end

  def edit
  end

  def create
  end

  def update
  end

  def destroy
  end
end

下面是profiles_controller.rb中current_user的说明

module SessionsHelper
    def sign_in(user)
    cookies.permanent[:remember_token] = user.remember_token
    self.current_user = user
  end

  def signed_in?
    !current_user.nil?
  end

  def current_user=(user)
    @current_user = user
  end

  def current_user
    @current_user ||= User.find_by_remember_token(cookies[:remember_token])
  end

  def sign_out
    self.current_user = nil
    cookies.delete(:remember_token)
  end
end

最佳答案

像这样使用多态路由的形式将始终使用新记录的复数路径。您需要在表单中明确说明:

form_for([@user, @profile], :url => user_profile_path(@user))

好消息是,create 路由与 update 路由相同。

关于ruby-on-rails - 嵌套路由和 form_for 和 NoMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11336741/

相关文章:

ios - 如何正确处理 View

css - Rails 4 字体在 Apache 上的生产中预编译后不呈现

ruby-on-rails - 如何基于多个布局组织 Assets 并分别渲染?

ruby-on-rails - Ruby Regex - 需要替换正则表达式匹配中出现的每个字符

ruby-on-rails-3 - 如何通过 IP 地址限制对所有设备 Controller 的访问?

c# - 如何安全地处理对存储库数据的无效请求?

mysql - 为 ruby​​ on rails 编写的 mysql 代码中的错误

ruby-on-rails - rails 4 : Flash message persists for the next page view

ruby - Rails 3 应用程序的 respond_with 语法有奇怪的行为吗?

javascript - 动态启用按钮