我想做的是:让当前登录的用户(" current_user ")创建成人类(“成人”)的新实例,如果current_user没有指定成人拥有的孩子数(num_kids),而current_user指定成人到用户的adult.relationship是“丈夫”、“妻子”或“伴侣”,那么我希望将adult.num_kids的值设置为user.num_kids的现有值。
背景:我有一个用户类和一个成人类。用户has_many成人和成人belongs_to用户。
我在我的current_user中定义了一个application_controller助手方法:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
helper_method :current_user
private
def current_user
current_user ||= User.find(session[:user_id]) if session[:user_id]
end
end在成人控制器/创建函数中,我有一行:@adult.user_id = current_user.id
这样做很好,而且我能够创建成人,并正确引用成人belongs_to的用户。
在我的成人模型中,我有:
class Adult < ActiveRecord::Base
has_many :kids
belongs_to :user
after_initialize :defaults
after_create :defaults_shared_info
def defaults
self.vacation_days ||= '10'
end
def defaults_shared_info
if ['husband', 'wife', 'partner'].any? { self.relationship }
self.num_kids ||= User.find(self.user_id).num_kids
else
end
end
end默认情况下,vacation_days = 10的设置工作正常。
但是,成人的num_kids设置为用户的num_kids没有,我的结果是adult.num_kids =0
我已经确认了user.num_kids =2,所以这不是问题所在。
当我将代码更改为
def defaults_shared_info
if ['husband', 'wife', 'partner'].any? { self.relationship }
self.num_kids ||= current_user.num_kids
else
end
end我得到错误消息“未定义局部变量或方法`current_user'”
最初,我尝试不区分after_initialize和after_create,并在after_initialize :defaults下使用了所有的代码
这也给出了同样的错误“未定义局部变量或方法`current_user'”。
我感到困惑的是,如果我能够创建一个参考current_user.id的成人实例,那么上面的代码就不能工作了。
发布于 2015-05-13 15:47:02
通过将after_create改为before_create,我做到了这一点。
https://stackoverflow.com/questions/30199211
复制相似问题