많은 해결책을 시도해 봤지만 좋은 오류가 발생했지만 여전히 오류가 발생합니다. 나는 내 모든 질문을 편집하고있다.NoMethodError at/undefined 메쏘드`name 'for nil : NilClass
friendly_id 보석으로 친숙한 URL을 만들려고합니다. 내 프로젝트 첫 번째 사용자는 devise에 가입해야합니다. 유증 내가 user.name이 Friendly_id 후보가 될 수 있도록 할
delegate :age, :city, :region, :country, to: :profile
모델/user.rb로 모델을 프로파일 링하는 몇 가지 정보를 전달합니다.
class Profile < ActiveRecord::Base extend FriendlyId friendly_id :user_name , use: :slugged def user_name user.name end
그러나 무기 호에 대한/ 정의되지 않은 메서드`이름 '에서 오류를
NoMethodError을주고있다 :
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 [email protected] || @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
클래스 범위에 존재하지 않습니다
다른 문제로 질문을 편집했습니다. 첫 번째 문제가 해결 되었습니까? – Rodrigo
@Rodrigo 문제의 원인을 발견했습니다. 내 사용자 모델은 프로필의 인스턴스를 생성합니다. 나는 사용자 컨트롤러에 의해 생성 된 '사용자'의 값에 액세스하려고 시도하고 컨트롤러가 만들 수 있기 전에 해당 값에 액세스하려고합니다. 그게 문제가되는 이유. – Adt
@Rodrigo 내가 '클래스 프로파일에 의해 '사용자'를 만들기 위해 노력하고 <액티브 :: 자료 이 FriendlyId friendly_id u_name 사용을 확장 : 데프 사용자 = User.find (인수를) self.u_name 장타율 을 .NAME end belongs_to : 사용자 accepts_nested_attributes_for : 사용자 ' u_name 메서드를 작성하는 올바른 방법을 알려주시겠습니까? – Adt