0

После того как я провел дни, работая над разделом профиля пользователя моего сайта, я обнаружил, что build_profile не работает.Мой метод сборки больше не работает в ruby ​​on rails

Я не знаю, что не так, это не имеет смысла, поскольку на днях он отлично работал. Теперь он не создает строку в таблице профилей каждый раз, когда создается новый пользователь.

Вот мой контроллер пользователи создают код действия:

def create 
    @user = User.new(params[:user]) 
    respond_to do |format| 
     if @user.save 
     @user.build_profile.save #same as Profile.new(:user_id => @user.id) 
     login @user 
     UserMailer.join_confirmation(@user).deliver 
     format.js { render :js => "window.location = '#{root_path}'" } 
    # flash[:notice] = "Welcome!" 
     else 

     format.js { render :form_errors } 
     end 
    end 
    end 

Пользователи модели:

class User < ActiveRecord::Base 

    has_one :profile, :autosave => true 
    accepts_nested_attributes_for :profile 

    # Setter and getter methods 
    attr_accessor :password # virtual password attribute 


    # A list of white list of attributes accessible by users in forms 
    attr_accessible :email, :username, :password, :password_confirmation 

Профиль модели:

class Profile < ActiveRecord::Base 

    belongs_to :user 



# attr_accessor :password 
    attr_accessible :first_name, :last_name, :gender, :motd, :birthday, 
    :marital_status, :sexual_preference, :location, :country, :ethnicity, 
    :about_me, :height, :eye_colour, :body_type, :likes, :dislikes, :drugs, 
    :alcohol, :cigarettes, :bad_habits, :food, :music, :television, :book, 
    :animal, :place, :possession, :sport 

метод взрыва ошибок:

NameError (undefined local variable or method `build_profile' for #<UsersController:0x00000101d63510>): 
    app/controllers/users_controller.rb:16:in `block in create' 
    app/controllers/users_controller.rb:14:in `create' 

Это очень раздражает, так как я много работаю над этим, и он не работает.

Я бы очень признателен за помощь с этим Вида считает

Обновление

Rspec ошибку:

Failures: 

    1) UsersController JOIN 'create' success should create a user 
    Failure/Error: post :create, :user => @user 
    NoMethodError: 
     undefined method `ethnicity' for #<Profile:0x0000010367cab0> 
    # ./app/controllers/users_controller.rb:16:in `block in create' 
    # ./app/controllers/users_controller.rb:14:in `create' 
    # ./spec/controllers/users_controller_spec.rb:96:in `block (5 levels) in <top (required)>' 
    # ./spec/controllers/users_controller_spec.rb:95:in `block (4 levels) in <top (required)>' 

Finished in 2.75 seconds 
47 examples, 1 failure, 1 pending 

Failed examples: 

rspec ./spec/controllers/users_controller_spec.rb:94 # UsersController JOIN 'create' success should create a user 

Странно! Я выполнил проверки, и этот атрибут существует в моем db и в списке attr_accessible, поэтому я совершенно озадачен.

Я упал и снова мигрировал и до сих пор не повезло.

+0

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

+0

У меня установлен rspec, но он ленился и прекратил использовать его. Я действительно понимаю важность тестов сейчас. Первый урок. Мысль, потому что это не большой сайт, который я строил, я мог бы избежать минимальных тестов. – LondonGuy

+0

Я загрузил rspec, потому что у меня были некоторые тесты, написанные для моего user_controller, и это говорит мне, что у меня есть неопределенный метод «этническая принадлежность» для профиля. Я проверил БД, и он там, и я также проверил список attr_accessible – LondonGuy

ответ

0

Добавление:

:before_create :build_profile 

модели пользователей сделал трюк.

0

Вам необходимо добавить * profile_attributes * к вашему attr_accessible вызову внутри родительской модели, в данном случае User. Пожалуйста, смотрите документацию: api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

Смежные вопросы