【问题标题】:Accessing a variable declared in a controller from a model从模型访问控制器中声明的变量
【发布时间】:2009-08-22 02:09:37
【问题描述】:

我正在使用 facebooker gem,它在控制器范围内创建一个名为 facebook_session 的变量(这意味着当我可以从 userscontroller 部分调用 facebook_session.user.name 时可以)。但是,当我重写 full_name 函数(位于我的模型中)时,我无法访问 facebook_session 变量。

【问题讨论】:

    标签: ruby-on-rails scope


    【解决方案1】:

    您必须在某个时候将值传递到模型中,然后在需要定期访问时将其存储。
    模型不允许从控制器中提取数据——这会破坏控制台视图、单元测试和其他一些情况。

    最简单的答案是这样的:

    class User
        attr_accessor :facebook_name
        before_create :update_full_name
    
        def calculated_full_name
           facebook_name || "not sure"
        end
    
        def update_full_name
           full_name ||= calculated_full_name
        end
    end
    
    
    class UsersController
        def create
           @user = User.new params[:user]
           @user.facebook_name = facebook_session.user.name
    
           @user.save
        end
    end
    

    【讨论】:

    • 感谢您的回复 Austin,在这种情况下,如果您有类似的情况,此代码是否可以工作: x = User.find(1) x.full_name 我不确定 create 方法是否存在像这样称呼。谢谢
    • 我已经澄清了我的代码,所以你知道如何将 facebook_name 保存到数据库中。现在它应该可以按照您的建议检索它了。
    猜你喜欢
    • 2012-10-07
    • 2011-07-29
    • 2011-01-26
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多