【问题标题】:Rails - undefined method `user' for ActiveRecord::RelationRails - ActiveRecord::Relation 的未定义方法“用户”
【发布时间】:2013-08-06 09:37:42
【问题描述】:

我在 Users 控制器中有名为 dashboard 的操作。 是这样的:

   def dashboard
      @data = @user.datas.includes(:user).includes(:images)
      render 'datas/show'
   end

我收到错误#ActiveRecord::Relation:0x007fc702d34868 的未定义方法“用户”> 在这一行:

= render 'users/header', :user => @data.user

这怎么可能?在@data 变量中是需要的一切......

【问题讨论】:

  • 您的@data 变量包含多条记录,请改用= render 'users/header', :user => @data.first.user,甚至,您已经拥有它,变量@user(还有@variables 在控制器的操作、视图和关联之间共享)部分,因此您不必将变量 @user@data 传递给此部分)
  • @MrYoshiji - 我知道有些人在 cmets 中回答问题,但通常是在几乎微不足道的答案的情况下。我很好奇你为什么在这种情况下选择不使用“应答”机制。
  • @PeterAlfvin 因为我懒得“格式化”一个好的答案。注释不需要粗体、缩进或示例。我尝试先发表评论,如果提问者想要更多信息,我会发布答案
  • @user984621 我的回答有帮助吗?

标签: ruby-on-rails ruby templates model render


【解决方案1】:

您的问题是您在对象列表上调用实例方法。

@data = @user.datas.includes(:user).includes(:images)

这实际上是属于用户实例@user的Data对象数组。

要解决这个问题,您可以获取列表的第一个元素并获取其用户:

= render 'users/header', :user => @data.first.user

但您应该知道所有@variables 在控制器的操作、视图和调用的部分之间共享。考虑到这一点,您会注意到您可以简单地执行以下操作:

# in datas/show.html.haml
= render 'users/header'

# in users/_header.html.haml
# you can use the @user variable as your wishes
= @user

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-24
    • 2015-08-09
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    相关资源
    最近更新 更多