Search code examples
ruby-on-railsrubymodel-associations

Unable to display belonging between two objects in view


I'm trying to display every objets that a dresseur own but when I do in

app/views/dresseurs/index.html.erb

<% @dresseurs.each do |dresseur| %>
  <tr>
    <td><%= dresseur.objets%></td>
  </tr>
<% end %>

It displays on my view

<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Objet:0x007fc4d34c1f90>

app/controllers/dresseur_controller.rb

def index
  @dresseurs = Dresseur.all
  @objet = Objet.all
end

app/models/dresseur.rb

class Dresseur < ActiveRecord::Base

  #Validations
   before_save { self.email = email.downcase}
   validates :pseudo, presence: true, length: {maximum:13}
   VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
   validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },length {maximum:50}, uniqueness: {case_sensitive: false}
    validates :password, length: { minimum: 6 }

   #Associations
   has_and_belongs_to_many :objets
  end

app/models/objet.rb

class Objet < ActiveRecord::Base
  has_and_belongs_to_many :dresseurs
end

Solution

  • Actually you are having relation between Dresseur and Objet model having has_and_belongs_to_many so dresseur.objets will return <ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Objet only(array).

    so,you should loop again dresseur.objets this and you should display.

    <% @dresseurs.map do |dresseur| %>
     <tr>
      <td><% dresseur.objets.each do |obj|%>
       <%=obj%>
      <%end%></td>
     </tr>
    <% end %>