[英]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”)創建一個Adult類(“ adult”)的新實例,並且-如果current_user沒有指定該成人具有AND的孩子數(num_kids),並且current_user指定的成年人與用戶的“成年人”關系是“丈夫”,“妻子”或“伙伴”,那么我想將Adult.num_kids的值設置為等於user.num_kids的現有值
背景:我有一個用戶班和一個成人班。 用戶has_many個成年人,一個成年人屬於一個用戶。
我在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 /創建功能中,我有以下一行:@ adult.user_id = current_user.id
這可以正常工作,並且我能夠創建對Adult所屬用戶正確引用的Adults。
在我的成人模型中,我有:
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
我收到錯誤消息“未定義的局部變量或方法“ current_user””
我最初嘗試不區分after_initialize和after_create,並且將所有代碼都放在after_initialize下:defaults
這也產生了相同的錯誤“未定義的局部變量或方法“ current_user””
我很困惑為什么,如果我可以參考current_user.id創建一個Adult實例,那么上面的代碼將無法正常工作。
通過將after_create
更改為before_create
,我可以正常工作。
感謝在這里發布的人們: https : //stackoverflow.com/a/21757230/4797451
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.