NoMethodError at / undefined метод `имя' для nil:NilClass

Я пробовал много решений и нашел хорошее, но все равно получаю ошибку. Я редактирую весь свой вопрос.

Я пытаюсь создать дружественный URL-адрес с помощью драгоценного камня friendly_id. В моем проекте Первый пользователь должен зарегистрироваться с помощью devise. Devise передаст некоторую информацию модели профиля с помощью

модель/user.rb

delegate :age, :city, :region, :country, to: :profile

Я хочу, чтобы user.name был кандидатом на Friendly_id. Я пробовал следующий код в моей модели профиля: -

 class Profile < ActiveRecord::Base

       extend FriendlyId
      friendly_id :user_name , use: :slugged 

       def user_name
       user.name
       end

Но выдает ошибку

NoMethodError at / undefined метод `имя' для nil:NilClass

сейчас После отправки пользовательской формы.

Пожалуйста, предложите возможное решение с объяснением.

Мой User.rb выглядит так

require 'open-uri'

class User < ActiveRecord::Base
  paginates_per 10

  validates :name , presence: true, length: { maximum: 200 }

  scope :by_name, ->(name) do
    joins(:profile).where('lower(name) LIKE ?', "%#{name.downcase}%")
  end  

  delegate :age, :city, :region, :country, to: :profile

  has_one :profile, dependent: :destroy
  accepts_nested_attributes_for :profile


      def self.new_with_session(params, session)
        session_params = { 'profile_attributes' => {} }

        provider = session['devise.provider']
        if provider && data = session["devise.#{provider}"]
          session_params['name'] = data[:name] if data[:name]
          session_params['email'] = data[:email] if data[:email]
          session_params['profile_attributes'] =
            { avatar: data[:image] } if data[:image]
        end

        params.deep_merge!(session_params)
        super.tap do |user|
          if auth = Authorization.find_from_session(session, provider)
            user.authorizations << auth
          end
        end
      end

      def password_required?
        super && registered_manually?
      end

      def registered_manually?
        encrypted_password.present?
      end

    end

А мой profile.rb выглядит так

class Profile < ActiveRecord::Base

   extend FriendlyId
    friendly_id user.name, use: :slugged 


  belongs_to :user
  accepts_nested_attributes_for :user


  validates :website, allow_blank: true, uri: true

  def website=(url_str)
    if url_str.present?
      url_str = "http://#{url_str}" unless url_str[/^https?/]
      write_attribute :website, url_str
    end
  end    

end

Я думаю, что проблема здесь:

Request parameters  
{"action"=>"new", "controller"=>"users/registrations"}
Please suggest possible solution and explanation. 

И пользователи/регистрация:

class Users::RegistrationsController < Devise::RegistrationsController
  layout 'land'

  def create
    params[:user][:profile_attributes].delete(:place)

  end  
  protected

    def after_sign_up_path_for(resource)
      welcome_path
    end
end

Я создаю пользователя в контроллере профиля

    def load_profile
      @profile = Profile.friendly.find(params[:id])
      if !@profile || @profile.user.blocked_users.include?(current_user)
        redirect_to home_path
      else
        @user = @profile.user
      end
    end

@Rodrigo помог мне найти ошибку, связанную с тем, что Friendly_id не может создать ссылку с экземпляром пользователя.


person Adt    schedule 20.01.2015    source источник
comment
Вы отредактировали свой вопрос с другой проблемой. Первую разрешили?   -  person Rodrigo    schedule 21.01.2015
comment
@ Родриго, я нашел причину проблемы. Моя пользовательская модель, генерирующая экземпляр профиля. Я пытаюсь получить доступ к значению «пользователь», созданному пользовательским контроллером, и я пытаюсь получить доступ к его значению до того, как контроллер сможет его создать. Вот почему это создает проблемы.   -  person Adt    schedule 21.01.2015
comment
@Rodrigo Я пытаюсь создать «пользователя» с помощью class Profile < ActiveRecord::Base extend FriendlyId friendly_id u_name , use: :slugged def self.u_name user = User.find(args).name end belongs_to :user accepts_nested_attributes_for :user Можете ли вы сказать мне, как правильно написать метод u_name?   -  person Adt    schedule 21.01.2015
comment
проблема в том, что я не знаю, в чем твоя проблема сейчас. Во-первых, вам грустно, что ваш сервер rails не запускается, а затем вы отредактировали свой вопрос с проблемой маршрута. Итак, ваш сервер уже работает без проблем? когда возникает ошибка?   -  person Rodrigo    schedule 21.01.2015
comment
@ Родриго Я никогда не говорил, что мой сервер rails не запускается. Я получал неинициализированную постоянную ошибку раньше, а также сейчас.   -  person Adt    schedule 21.01.2015
comment
NameError at / uninitialized constant User::Profile В начале localhost:3000   -  person Rodrigo    schedule 21.01.2015
comment
Давайте продолжим обсуждение в чате.   -  person Adt    schedule 21.01.2015


Ответы (2)


В этой строке ошибка:

friendly_id user.name, use: :slugged 

Пользователь переменной не существует в области класса Profile. Вы должны использовать что-то вроде этого:

friendly_id :user_name, use: :slugged 

def user_name
  user.name
end
person Rodrigo    schedule 20.01.2015

extend FriendlyId
     friendly_id u_name, use: :slugged 
     def u_name
      user.name
     end 
    belongs_to :user

Вы определили пользователя? что такое user.name?

person Kohl    schedule 20.01.2015