我有下面的方法将数据保存到用户表以及user_details表。Rails如何获得关联的模型属性
当我将@ newUser变量传递给EmailMailer时,我无法访问user_details属性。我如何传递@ newUser对象中的user_details而不必重新查询数据库?
模型
class User < ActiveRecord::Base
has_one :user_details, :dependent => :destroy
accepts_nested_attributes_for :user_details
attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :login, :home_phone, :cell_phone, :work_phone, :birthday, :home_address, :work_address, :position, :company, :user_details_attributes
end
class UserDetails < ActiveRecord::Base
belongs_to :user
attr_accessible :first_name, :last_name, :home_phone, :cell_phone, :work_phone, :birthday, :home_address, :work_address, :position, :company
end
控制器
# POST /users
def create
@newUser = User.new(params[:user], :include =>:user_details)
# create password
require 'securerandom'
password = SecureRandom.urlsafe_base64(8)
@newUser.password = password
respond_to do |format|
if @newUser.save
@newUser.build_user_details
# Tell the UserMailer to send a welcome Email after save
EmailMailer.welcome_email(@newUser).deliver
# To be used in dev only. Just tests if the email was queued for sending.
#assert ActionMailer::Base.deliveries.empty?
format.html {
flash[:success] = "User created successfully"
redirect_to(contacts_path)
}
else
format.html {
flash[:error] = flash[:error].to_a.concat resource.errors.full_messages
redirect_to(contacts_path)
}
end
end
end
@newuser是一个实例变量,您可以像处理视图一样使用实例变量来处理邮件,就像在视图中一样。 – Ryan
我知道瑞安,但我不知道如何获得@ newUser实例变量可访问的user_details。 – Catfish
@Catfish仅供参考,你不应该像这样发送内联邮件。他们应该被转移到后台处理。您可以使用DelayedJob或Resque轻松完成此操作。这样的内联电子邮件传递将对您的表现产生严重影响。 –