2

Как указано ниже, я не использую «user_profiles_path» как множественное число, потому что я определил «resource: profile» в вложенном ресурсе.Вложенные маршруты и form_for и NoMethodError

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 

routes.rb:

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

v IEW: профили/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 

Контроллер:

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 

Ниже приводится иллюстрации из CURRENT_USER в profiles_controller.rb

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 
+0

Пробовал ли вы 'form_for ([@ profile, @ user])'? –

+0

Да, я тоже это пробовал. Как ни странно, я продолжал загружать веб-страницу без изменения деталей, как показано выше. Проблема исчезла. – smileyUser

+0

Я видел это раньше, иногда мне нужно перезапустить приложение, когда route.rb изменен даже в режиме разработки. –

ответ

6

Форма для использования полиморфного r Подобные ситуации всегда будут использовать плюрализуемый путь для новых записей. Вы должны быть четко в вашей форме:

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

Хорошая новость, хотя, create маршрут совпадает с update маршрута.

+0

Он работает фантастически хорошо. Однако он работал без внешних скобок (скобки). – smileyUser