对于当前用户的同一属性,如何将 object 的默认值设置为等于当前用户的值? (Rails 4)
How do I set the default value of an object equal to the current user's value for that same attribute of the current user? (Rails 4)
我想做的事情:
让当前登录的用户 ("current_user") 创建成人 class ("adult") 的新实例,并且 - 如果 current_user 未指定孩子的数量 ( num_kids) that adult has AND current_user 指定 adult to user 的 adult.relationship 是 "husband", "wife" or "partner", 那么我要设置adult.num_kids 的值等于 user.num_kids
的现有值
背景:
我有一个用户 class 和一个成人 class。一个用户 has_many 成人和一个成人 belongs_to 一个用户。
我在 application_controller:
中定义了一个 current_user 辅助方法
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
在我的 Adults Controller / create 函数中,我有一行:
@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 = nil
我已经确认 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
我收到错误消息 "undefined local variable or method `current_user'"
我最初尝试不区分 after_initialize 和 after_create,并将所有代码放在
after_initialize:默认值
这也给出了同样的错误"undefined local variable or method `current_user'"
我很困惑为什么,如果我可以参考 current_user.id 创建 Adult 的实例,上面的代码就不起作用。
通过将 after_create
更改为 before_create
,我成功了。
感谢在这里发帖的人:
我想做的事情: 让当前登录的用户 ("current_user") 创建成人 class ("adult") 的新实例,并且 - 如果 current_user 未指定孩子的数量 ( num_kids) that adult has AND current_user 指定 adult to user 的 adult.relationship 是 "husband", "wife" or "partner", 那么我要设置adult.num_kids 的值等于 user.num_kids
的现有值背景: 我有一个用户 class 和一个成人 class。一个用户 has_many 成人和一个成人 belongs_to 一个用户。
我在 application_controller:
中定义了一个 current_user 辅助方法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
在我的 Adults Controller / create 函数中,我有一行: @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 = nil
我已经确认 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
我收到错误消息 "undefined local variable or method `current_user'"
我最初尝试不区分 after_initialize 和 after_create,并将所有代码放在 after_initialize:默认值
这也给出了同样的错误"undefined local variable or method `current_user'"
我很困惑为什么,如果我可以参考 current_user.id 创建 Adult 的实例,上面的代码就不起作用。
通过将 after_create
更改为 before_create
,我成功了。
感谢在这里发帖的人: