ActiveRecord_Associations_CollectionProxy问题

时间:2016-02-04 03:25:26

标签: ruby-on-rails ruby rails-activerecord erb

我有Class City has_many :clientsClass Client has_one :citybelongs_to :city

现在这是我的客户迁移:

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

我的城市迁移:

class CreateCities < ActiveRecord::Migration
  def change
    create_table :cities do |t|
      t.string :name

      t.timestamps null: false
    end
  end
end

这是我的城市show.html.erb

<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%但我的输出只是&#34;客户&#34;。我知道我很接近得到我想要的东西,但我需要一些帮助。那么,我怎样才能展示拥有该特定城市的所有客户?

3 个答案:

答案 0 :(得分:0)

由于城市有很多客户。 你可以做一个.each循环并显示所有记录。

<% @city.clients.each do |client|%>

<%= client.business %>

<% end %>

答案 1 :(得分:0)

  

我已经完成了@ city.clients.name,但我的输出只是单词“Client”

@city.clientsActiveRecord_Associations_CollectionProxy,不是您预期的客户,因为您的模型中clientshas_many关系。顺便说一下,@city.clients.name会实际返回class_name

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

<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>

答案 2 :(得分:0)

  

希望显示具有该特定城市的所有客户

<% @city.clients.each do |client| %>
  <%= client.id %>
<% end %>

您遇到的问题是输出 city.clients意味着您要显示clients city的“集合”(IE { {1}})。

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

  

Client.where(city_id: @city.id)has_one :city

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

如果您希望belongs_to :city 拥有某个城市,则必须将其命名为其他名称,否则请将其从client中删除:

model