gpt4 book ai didi

ruby-on-rails - ActionView::Template::Error(nil:NilClass 的未定义方法 `city'):

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:51 27 4
gpt4 key购买 nike

我有 belongs_to/has_many Trainer之间的关系和 Sportists .我正在尝试遍历 view 中的值像这样:

<% @sportists.each do |s| %>
<%= s.name %> <%= s.surname %>
<%= s.trainer.city %>
<% end %>

Sportist相关信息工作正常,但 trainers - 没有。我得到标题中给出的错误。如果我尝试在 rails console 中执行此操作一切正常,所以应该建立良好的关系。

我尝试过的事情:

<% s.trainers.each do |t| %>
<%= t.city %>
<% end %>

这给了我 undefined method 'trainers'错误,如果我尝试 s.trainer我明白了

#<TRAINER:0X00000004CE7CB0>

那么解决办法是什么?

编辑

我的模型:

训练师

has_many :sportists
belongs_to :team
accepts_nested_attributes_for :sportists, :reject_if => :all_blank, :allow_destroy => true

运动家

belongs_to :trainer

Controller

@sportists = Sportist.all

最佳答案

您在下面的代码中得到了 undefined method 'city' for nil:NilClass:

<% @sportists.each do |s| %>
<%= s.name %> <%= s.surname %>
<%= s.trainer.city %>
<% end %>

这意味着有一个 sportists 记录没有关联到它的 trainer。因此,对于那个特定的运动列表记录,s.trainernil 并且您不能在 nil 对象上调用 city

要识别您没有关联的trainersportist 记录,只需更新 View 代码如下:

<% @sportists.each do |s| %>
<%= s.name %> <%= s.surname %>
<%= s.trainer.try(:city) %>
<% end %>

这样即使您没有关联的 trainer 记录,也不会引发错误。在呈现的 View 中,只需查找未显示任何 citysportlist 记录,即没有关联 sportlist 记录>培训师

至于您收到的第二个错误 undefined method 'trainers'

<% s.trainers.each do |t| %>
<%= t.city %>
<% end %>

sportlist belongs_to trainer,您只有动态方法trainer(注意单数)可用,而不是trainers(注意复数)。此外,s.trainer 将返回单个训练记录,因此您不能使用 each 方法对其进行迭代,因为它不是集合而是单个记录。

更新

理想情况下,您不应该允许在没有trainer 的情况下创建sportist 记录。您应该在 sportlists 表上创建的外键 trainer_id 上添加了一个 index有了这个,您甚至不必使用 try 方法,您当前的代码将按原样运行。

关于ruby-on-rails - ActionView::Template::Error(nil:NilClass 的未定义方法 `city'):,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23479683/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com