积极关系:未定义的方法`city'

时间:2015-10-04 13:07:06

标签: ruby-on-rails ruby-on-rails-4

我使用的是Rails 4.2.4。我知道我已经正确设置了我的关系,但我得到了undefined method "city" for #

support.rb:

belongs_to :user

user.rb:

has_many :supports (should the be plural?)

视图/用户/ show.html.erb:

<%= @user.supports.city %>

在我的支持表中:

t.string :city
t.integer :user_id

我有一个支持表单,我填写了city字段,我可以在rails控制台的Support.all条目中看到,所以我确定:city的值是保存在数据库中。

我已将rails g scaffold support用于此过程,用户可以在此过程中创建许多支持。我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

  1. has_many :supports应为复数
  2. @user.supports返回所有支持但它可以返回一个空数组。所以你必须使用:
  3. if support = @user.supports.first # use support.city end

    <% @user.supports.each do |support| %>
       <h1><%= support.city %></h1>
    <% end %>
    

答案 1 :(得分:2)

如果您尝试访问关联数据,则需要了解多元关系(IE has_many)将返回集合数据:

#app/models/support.rb
class Support < ActiveRecord::Base
   belongs_to :user #-> @support.user
end

#app/models/user.rb
class User < ActiveRecord::Base
   has_many :supports #-> @user.supports
end

要回答有关:plural的问题,您无需将其称为复数形式。但是,根据Rails惯例,它构建了整个关系(和查询)off the back of the name

  

belongs_to个关联必须使用单数术语。如果你用过   以上例子中的客户关联的复数形式   订单模型,你会被告知有一个“未初始化的   常量订单::客户“。这是因为Rails自动推断   关联名称的类名。如果关联名称是   错误地多元化,那么推断的类将被错误地复数化   太

如果您想为has_many的关联使用单数名称,则必须定义您的班级等:

#app/models/user.rb
class User < ActiveRecord::Base
   has_many :support, class_name: "Support", foreign_key: "support_id"
end

-

当您从has_many 集合获取退回的数据时,您需要循环访问数据。由于它是一个集合(而不是“成员” - 单个记录),您将需要类似以下内容:

<% @user.supports.each do |support| %>
   <%= support.city %>
<% end %>