簡體   English   中英

如何為當前用戶的相同屬性設置對象的默認值等於當前用戶的值? (第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”)創建一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM