Soy un verdadero novato en Rails. En realidad, soy un analista de negocios que intenta aprender a programar por mí mismo para poder trabajar con los desarrolladores mucho más de cerca en el trabajo. Tengo problemas para recuperar campos de modelos.

Tengo dos modales User y CricketClub Adverts, estos se pueden ver a continuación:

class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable

    mount_uploader :picture, PictureUploader

    #validates_presence_of   :picture
    #validates_integrity_of  :picture
    #validates_processing_of :picture

  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

  has_many :cricket_club_advert
  has_many :application
end

Y

class CricketClubAdvert < ActiveRecord::Base
  belongs_to :user, foreign_key: "user_id"
  has_many :application

  mount_uploader :picture, PictureUploader
end

En mi controlador tengo el siguiente código:

@adverts = User.includes(:cricket_club_advert)

En mi opinión, tengo lo siguiente:

<% @adverts.each do |advert| %>    
      <!-- Feed Entry -->
      <div class="row">
        <div class="large-2 columns small-3">
        <%= image_tag(advert.picture_url) %>
        </div>
        <div class="large-10 columns">
          <h4> <%= link_to advert.cricket_club_advert.title, cricket_club_advert_path(advert.cricket_club_advert.id) %></h4>
 <%= truncate(strip_tags(advert.cricket_club_advert.description), length: 250) %> 
          <ul class="inline-list">
            <li><a href="">More</a></li>
          </ul>
          </div>
          </div>
          <hr>  

      <!-- End Feed Entry -->
<% end %>

De acuerdo con la documentación, he usado las llamadas correctamente, pero obtengo este error:

método indefinido `título 'paraCricketClubAdvert :: ActiveRecord_Associations_CollectionProxy: 0x007feca33270c0>

No puedo entender qué estoy haciendo mal.

0
Glenn Coyle 2 feb. 2015 a las 13:06

2 respuestas

La mejor respuesta

Lo que realmente hace aquí es iterar sobre users y su adverts. Entonces, el nombre de su variable es bastante engañoso, debería ser:

@users = User.includes(:cricket_club_adverts)

Y en tu opinión:

<% @users.each do |user| %>
  # ...
  # ... here the iteration over adverts starts:
  <% user.cricket_club_adverts.each do |advert| %>
    # ...
  <% end %>
  # ...
<% end %>

Por cierto, tenga en cuenta la forma plural: si usa la asociación has_many, debe nombrar sus asociaciones en plural.

0
Marek Lipka 2 feb. 2015 a las 10:31
Instead of : 
@adverts = User.includes(:cricket_club_advert)
Use :
@adverts = User.includes(:cricket_club_adverts)

Porque, un usuario tiene muchos cricket_club_adverts (tiene - muchas relaciones)

first_advert = @adverts.first
cricket_advert = first_advert.cricket_club_adverts.first 
 #as one user can have many cricket_club_adverts and each 
 #cricket_club_advert will have title, id, description attributes.

hence title, id, description can be fetched by:
cricket_advert.title  #fetch the title
cricket_advert.id  #fetch the id
cricket_advert.description  # fetch the description.
0
Ajay 2 feb. 2015 a las 10:20