无法在视图中显示属于两个对象

时间:2014-04-26 15:01:17

标签: ruby-on-rails ruby model-associations

我正在尝试显示dresseur拥有的每个对象,但是当我在

应用/视图/ dresseurs / index.html.erb

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

它显示在我的视图

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

应用/控制器/ dresseur_controller.rb

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

应用/模型/ 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

应用/模型/ objet.rb

class Objet < ActiveRecord::Base
  has_and_belongs_to_many :dresseurs
end

3 个答案:

答案 0 :(得分:0)

尝试使用map代替

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

答案 1 :(得分:0)

因为每个dresseur都有很多objets,所以你得到的是对objets容器的引用。根据您的想法,您可能希望执行以下操作:

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

答案 2 :(得分:0)

实际上,DresseurObjet模型之间存在has_and_belongs_to_many的关联,因此dresseur.objets将只返回<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Objet(数组)。

所以,你应该再次循环dresseur.objets,你应该显示。

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