【问题标题】:Confused about calling objects fields in Ruby对在 Ruby 中调用对象字段感到困惑
【发布时间】:2014-02-17 07:47:28
【问题描述】:

为什么我会收到此错误消息?我正在努力使每个视频的帐户名称都显示出来。用户和帐户自己工作得很好。如果我不包含 .account_name,我只会得到一个丑陋的存储代码,例如:# 我想我对如何在对象中访问对象的字段感到困惑。

视频中的 NoMethodError#index nil:NilClass 的未定义方法“account_name”

<% @videos.each do |video|%>
    <tr>
        <td><%= video.file %></td>
        **<td><%= video.user.account_name %></td>**
        <td><%= video.name %></td>
    </tr>
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby object


    【解决方案1】:

    显然有一个Video 没有User

    改变这个:

    <td><%= video.user.account_name %></td>
    

    到这里:

    <td><%= video.user.try(:account_name) %></td>
    

    【讨论】:

    • Object#try 有点反模式。通常最好弄清楚为什么对象可能是 nil,并使用逻辑来专门处理这种情况。
    【解决方案2】:

    确保在模型之间建立了关系。

    app/models/user.rb

    class User < ActiveRecord::Base
      has_many :videos
    end
    

    app/models/video.rb

    class Video < ActiveRecord::Base
      belongs_to :user
    end
    

    这允许您执行以下操作:

    $ rails console
    > v = Video.first
    > v.user.account_name
    > u = User.first
    > u.videos
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多