首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveRecord_Associations_CollectionProxy问题

ActiveRecord_Associations_CollectionProxy问题
EN

Stack Overflow用户
提问于 2016-02-04 11:25:26
回答 3查看 596关注 0票数 1

我有一个Class Cityhas_many :clients和一个Class Clienthas_one :citybelongs_to :city

现在,这是我的客户端迁移:

代码语言:javascript
复制
class CreateClients < ActiveRecord::Migration
  def change
    create_table :clients do |t|
      t.string :business
      t.string :owner_or_manager
      t.string :number
      t.string :email
      t.belongs_to :city

      t.timestamps null: false
    end
  end
end

和我的城市迁移:

代码语言:javascript
复制
class CreateCities < ActiveRecord::Migration
  def change
    create_table :cities do |t|
      t.string :name

      t.timestamps null: false
    end
  end
end

这是我的城市show.html.erb

代码语言:javascript
复制
<div class="container">
  <div class="row">
    <div class="col-sm-12">
      <div class="col-sm-2 center-block mgntop">
        <h3><%=@city.name%></h3>
        <h3><%=@city.clients%></h3>
        <%= link_to "Edit", edit_city_path(@city), class: "btn" %>
        <%= link_to "Delete", city_path(@city), method: :delete, data: {confirm: "Estas seguro que quieres borrar este cliente?"}, class: "btn btn-danger" %>
      </div>
    </div>
  </div>
</div>

正如您在我的show.html.erb中看到的,我有<h3><%=@city.clients%></h3>,但我的输出是<Client::ActiveRecord_Associations_CollectionProxy:0x007f9383434bf8>。但我想向所有具有该特定城市的客户展示。我做过@city.clients.name%,但我的输出只是“客户端”这个词。我知道我马上就要得到我想要的了,但我需要一些帮助。那么,我如何显示具有该特定City的所有客户端呢?

EN

回答 3

Stack Overflow用户

发布于 2016-02-04 11:37:29

因为city有很多客户。您可以执行一个.each循环并显示所有记录。

代码语言:javascript
复制
<% @city.clients.each do |client|%>

<%= client.business %>

<% end %>
票数 0
EN

Stack Overflow用户

发布于 2016-02-04 15:03:37

我做过@city.clients.name,但我的输出只有一个单词"Client“

@city.clients是一个ActiveRecord_Associations_CollectionProxy,而不是您期望的客户端,因为在您的模型中,clientshas_many关系。顺便说一句,@city.clients.name实际上会返回你的class_name

只需像这样重构您的show.html.erb

代码语言:javascript
复制
<div class="container">
  <div class="row">
    <div class="col-sm-12">
      <div class="col-sm-2 center-block mgntop">
        <h3><%=@city.name %></h3>

        <!-- Remove <h3><%=@city.clients%></h3> -->
        <!-- Start replacing -->
        <% @city.clients.each do |client| %>
          <p><%= client.bussiness %><p>
          <p><%= client.number %><p>
          <p><%= client.email %><p>
        <% end %>
        <!-- End replacing -->

        <%= link_to "Edit", edit_city_path(@city), class: "btn" %>
        <%= link_to "Delete", city_path(@city), method: :delete, data: {confirm: "Estas seguro que quieres borrar este cliente?"}, class: "btn btn-danger" %>
      </div>
    </div>
  </div>
</div>
票数 0
EN

Stack Overflow用户

发布于 2016-02-04 21:21:39

想要显示具有该特定城市的所有客户端

代码语言:javascript
复制
<% @city.clients.each do |client| %>
  <%= client.id %>
<% end %>

你在输出city.clients时遇到的问题意味着你要显示clients of a city (IE Client.where(city_id: @city.id))的“集合”。

您需要遍历集合,并分别输出每个对象。

其中has_one :citybelongs_to :city

不能有两个具有相同名称的关联。

如果你想让你的client拥有一个城市,你必须给它起一个不同的名字,否则就把它从你的model中完全删除:

代码语言:javascript
复制
#app/models/client.rb
class Client < ActiveRecord::Base
   belongs_to :city                        #-> ok
   has_one :owned_city, class_name: "City" #-> only if you have "belongs_to :client" in City model
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35191931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档