用于在单独的表单上设计用户的配置文件模型

唐·朱利奥

has_one :profile想让我的设计用户链接到配置文件模型,我希望使用标准的用户名电子邮件和密码使初始用户表单非常简单。然后,我希望在首次登录时提示用户个人资料编辑表单,并且希望他们被迫填写一些数据。

目前,我的个人资料模型是:

class Profile < ActiveRecord::Base
  attr_accessible :time_zone, :telephone, :country, :opt_out, 
    :first_name, :last_name, :address, :city, :postcode, :birthdate, 
    :currency_id

  belongs_to :currency

  validates_presence_of :telephone, :country, :first_name, :last_name, 
    :address, :city, :postcode, :birthdate, :currency

  belongs_to :user
end

我的用户模型是:

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable, :confirmable

  before_create :initialize_user
  before_destroy :destroy_profile

  has_one :profile
  has_one :subscription

  attr_accessible :email, :password, :password_confirmation, :remember_me, 
    :username, :terms

  validates_acceptance_of :terms
  validates_presence_of :username

private
  def initialize_user
    generate_profile
    generate_free_subscription
  end

  def generate_free_subscription
    subscription = Subscription.new() do |s|
      s.expiration_date = nil
      s.plan = :free
      s.billing_name = username
      s.billing_street = "unknown"
      s.billing_zip = "unknown"
      s.billing_city = "unknown"
      s.billing_country = "unknown"
      s.billing_email = email
    end

    if subscription.save
      self.subscription = subscription
      self.roles = [:free]
    else
      msg = "Error generating free subscription for user, #{subscription.errors.to_yaml}"
      logger.error  msg
      raise msg
    end
  end

  def generate_profile
    p = Profile.new() do |p|
      p.daily_capital_exposure = 50
      p.risk_per_day = 60
      p.risk_per_trade = 30
      p.risk_per_week = 90
      p.user_id = self.id
      p.time_zone = "Rome"
    end

    if p.save
      self.profile = p
    else
      msg = "Error generating profile for user #{p.errors}"
      logger.error  msg
      raise msg
    end
  end

  def destroy_profile
    p = self.profile
    t = self.trades

    p.destroy
    t.destroy_all
  end
end

我的问题是,当我创建用户时,回调函数还会创建其配置文件,该配置文件缺少一些数据,因此无法创建配置文件。

我不想在配置文件中插入临时数据只是为了使配置文件正确验证,因为我真的想有一个很好的方法来强制用户插入此类信息。

我想我的错误是创建用户时我不应该创建配置文件,但是我不确定如何确保创建配置文件。

理查德·派克

您可以on:Profile验证中使用该选项

#app/models/profile.rb
Class Profile < ActiveRecord::Base
   validates_presence_of :telephone, :country, :first_name, :last_name, 
    :address, :city, :postcode, :birthdate, :currency, on: :update #-> means this will not fire on create
end

-

在条款building上建立的个人账户模式User,我们用下面的设置:

#app/models/user.rb
Class User < ActiveRecord::Base
   before_create :build_profile
end

这将User在创建该父模型时为该模型创建一个配置文件

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档