NoMethodError at / undefined方法`name’代表nil:NilClass

我已经尝试了很多解决方案,并提出了一个好的但仍然出错。 我正在编辑我的整个问题。

我正在尝试使用friendly_id gem创建友好URL。 在我的项目中,第一个用户需要使用设计注册。 设计会将一些信息传递给配置文件模型

模型/ 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方法`name’代表nil:NilClass

现在提交用户表单后。

请提供可能的解决方案和解释。

我的User.rb看起来像

 require 'open-uri' class User (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无法创建与用户实例的链接。

这一行有错误:

 friendly_id user.name, use: :slugged 

Profile类范围内不存在变量用户。 你应该使用这样的东西:

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

你定义了用户吗? 什么是user.name?