首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将对象的默认值设置为当前用户相同属性的当前用户值?(Rails 4)

如何将对象的默认值设置为当前用户相同属性的当前用户值?(Rails 4)
EN

Stack Overflow用户
提问于 2015-05-12 18:53:21
回答 1查看 306关注 0票数 0

我想做的是:让当前登录的用户(" current_user ")创建成人类(“成人”)的新实例,如果current_user没有指定成人拥有的孩子数(num_kids),而current_user指定成人到用户的adult.relationship是“丈夫”、“妻子”或“伴侣”,那么我希望将adult.num_kids的值设置为user.num_kids的现有值。

背景:我有一个用户类和一个成人类。用户has_many成人和成人belongs_to用户。

我在我的current_user中定义了一个application_controller助手方法:

代码语言:javascript
复制
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的用户。

在我的成人模型中,我有:

代码语言:javascript
复制
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,所以这不是问题所在。

当我将代码更改为

代码语言:javascript
复制
    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的成人实例,那么上面的代码就不能工作了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-13 15:47:02

通过将after_create改为before_create,我做到了这一点。

感谢在这里发布的人:https://stackoverflow.com/a/21757230/4797451

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30199211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档