创建时将属性保存到另一个模型中

时间:2014-06-30 09:29:33

标签: ruby-on-rails ruby methods

解决此问题的最佳方式是什么。

当在我的应用程序中创建用户时,您输入一个保存到用户模型的电子邮件地址,我想要做的是保存该电子邮件地址以说出一个配置文件模型,以便我可以在我的其他地方使用它应用。它不能作为配置文件模型的一部分进行编辑,如果用户模型中的电子邮件发生更改,则会更改

我有点不确定如何处理这个问题,after_create方法是否适用于这样的事情?

就语法而言,我不确定如何开始这个

2 个答案:

答案 0 :(得分:2)

user.rb

class User < AR
  after_create :create_profile
  after_update :update_email

  def create_profile
    Profile.create(email: email)
  end

  def update_email
    email_was = previous_changes['email'][1]
    email_is = email
    return nil if email_is == email_was
    Profile.find_by(email: email_was).update_attributes email: email_is)
  end

答案 1 :(得分:1)

您需要accepts_nested_attributes_for

型号:

class User
  has_one :profile
  accepts_nested_attributes_for :profile
  validates_associated :profile
end

class Profile  
  belongs_to :user
  validates :email, presence :true
end

控制器:

class UsersController
  def new
    @user = User.new
    @user.build_profile
  end

  def create
    @user = User.new(users_params)
    @user.save
  end

  private

  def users_params
    params.require(:user).permit(:username, :profile_attributes => [:email])    
  end

查看:

<%= form_for @user do |f| %>
  #other user stuff
  <%= f.fields_for :profile do |builder| %>
    <div class="field">
      <%= builder.label :email %>
      <%= builder.text_field :email %>
    </div>
  <% end %>
<% end %>