【问题标题】:ActionView::Template::Error动作视图::模板::错误
【发布时间】:2014-01-27 02:40:31
【问题描述】:

我正在尝试从哈希 current_role 中调用 user_idrole_id 字段。当我尝试调用current_role.role_idcurrent_role.user_id 时,我收到以下错误消息:

ActionView::Template::Error (undefined method `role_id' for #<ActiveRecord::Relation::ActiveRecord_Relation_RoleMembership:0x00000103d4fbd0>):

如果我尝试运行current_role.inspect,我会看到user_idrole_id 都已设置。这是current_role.inspect的回复:

#<ActiveRecord::Relation [#<RoleMembership id: 1, user_id: 1, role_id: 2, created_at: "2014-01-27 02:25:25", updated_at: "2014-01-27 02:25:25">]>

为什么我无法拨打current_role.role_idcurrent_role.user_id?任何帮助将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    这是因为current_roleActiveRecord::Relation 的一个实例,而不是RoleMembership

    要获取current_role 关系中第一个RoleMembershiprole_id,请使用:

    current_role.first.role_id
    

    如果你想让 current_role 默认为第一个 RoleMembership,你应该更新你的 current_role 定义如下:

    def current_role
      RoleMembership.where(...).first
    end
    

    使用更新的current_role 定义,您将能够使用current_role.role_id,它将返回预期的role_id

    【讨论】:

    • 解决了!如果我只包含一条记录的限制,我是否不必包含first
    • @evanvee,不,使用limit 也会返回ActiveRecord::Relation,但记录有限。
    猜你喜欢
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2017-10-07
    相关资源
    最近更新 更多