Мой метод сборки больше не работает в ruby ​​на рельсах - PullRequest
0 голосов
/ 14 января 2012

Проведя несколько дней, работая над разделом профиля пользователя на моем веб-сайте, я обнаружил, что build_profile не работает.

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

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

  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

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

Я бросил и перенесен, но все равно не повезло.

Ответы [ 2 ]

0 голосов
/ 14 января 2012

Добавление:

:before_create :build_profile 

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

0 голосов
/ 14 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...