解决此问题的最佳方式是什么。
当在我的应用程序中创建用户时,您输入一个保存到用户模型的电子邮件地址,我想要做的是保存该电子邮件地址以说出一个配置文件模型,以便我可以在我的其他地方使用它应用。它不能作为配置文件模型的一部分进行编辑,如果用户模型中的电子邮件发生更改,则会更改
我有点不确定如何处理这个问题,after_create方法是否适用于这样的事情?
就语法而言,我不确定如何开始这个
答案 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 %>