2013-01-15 1 views
0

Je suis un débutant travaillant sur une application RoR qui permet aux utilisateurs de mettre à jour leur CV avec des expériences et de l'éducation. J'ai deux modèles pour ces différents articles et voudrais les afficher ensemble dans l'ordre chronologique. Je veux savoir comment configurer ceci dans mon contrôleur de profil et voir.Combinaison de plusieurs modèles dans 1 Rails View

Je voudrais adopter cette même pratique pour une partie distincte de l'application qui va combiner les éléments post et discussion des utilisateurs de la même manière. Cependant, actuellement, je me concentre sur l'expérience et la partie éducation.

profils/show.html.erb:

<% if @experiences.any? or @educations.any? %> 
<div class="postExpOuter"> 
    <% @experiences.each do |experience| %> 
      <div class="postExp"> 
       <div> 
        <h2><%= experience.position %></h2> 
        <h3><%= experience.company %> | <%= experience.location %></h3> 
        <h4> 
         <%= experience.start_month %> <%= experience.start_year %> 
         <% if experience.end_year %> 
          <%= " - " + experience.end_month %> <%= experience.end_year %> 
         <% else %> 
          <span> - Present</span> 
         <% end %> 
        </h4> 
       </div> 
      </div> 
    <% end %> 
    <% @educations.each do |education| %> 
      <div class="postExp"> 
       <div> 
        <h2><%= education.degree %></h2> 
        <h3><%= education.school %></h3> 
        <h4> 
         <% if education.end_year %> 
          <span>Class of </span><%= education.end_year %> 
         <% else %> 
          <%= education.start_year %><span> - Present</span> 
         <% end %> 
        </h4> 
       </div> 
      </div> 
    <% end %> 
</div> 
<% end %> 

Répondre

0

profiles_controller.rb:

class ProfilesController < ApplicationController 
    def show 
    @user = User.find_by_profile_name(params[:id]) 
    if @user 
     @posts = @user.posts.all(:order => "created_at DESC", :limit => 3) 
     @experiences = @user.experiences.all(:order => "start_year DESC") 
     @educations = @user.educations.all(:order => "start_year DESC") 

     @items = (@experiences.to_a + @educations.to_a).sort_by(&:start_year).reverse[0,3] 

     render action: :show 
    else 
     render file: 'public/404', status: 404, formats: [:html] 
    end 
    end 
end 

profils/show.html.erb:

<% if @items.any? %> 
<div class="postExpOuter"> 
    <% @items.each do |item| %> 
     <% if item.is_a? Experience %> 
     <div class="postExp"> 
      <div> 
       <h2><%= item.position %></h2> 
       <h3><%= item.company %> | <%= item.location %></h3> 
       <h4> 
        <%= item.start_month %> <%= item.start_year %> 
        <% if item.end_year %> 
         <%= " - " + item.end_month %> <%= item.end_year %> 
        <% else %> 
         <span> - Present</span> 
        <% end %> 
       </h4> 
      </div> 
     </div> 
     <%- else -%> 
     <div class="postExp"> 
      <div> 
       <h2><%= item.degree %></h2> 
       <h3><%= item.school %></h3> 
       <h4> 
        <% if item.end_year %> 
         <span>Class of </span><%= item.end_year %> 
        <% else %> 
         <%= item.start_year %><span> - Present</span> 
        <% end %> 
       </h4> 
      </div> 
     </div> 
     <% end %> 
    <% end %> 
</div> 
<% end %> 
0

simplement piraté dans mon navigateur, ne sais pas si cela fonctionne directement:

<%- (@experiences.to_a + @educations.to_a).sort_by(&:end_year).each do |item| -%> 
    <%- if item.is_a? Experience -%> 

    your markup here... 

    <%- else -%> 

    your other markup here... 

    <%- end -%> 
<%- end -%> 

ont pas écrit ERB depuis ... euhh, longtemps. En fait, c'est juste ce qui suit: fusionner les 2 ActiveRecord-Relations en Arrays en un seul grand tableau, les trier par l'horodateur que vous voulez (vous pouvez ajouter .reverse à la fin si vous voulez). En parcourant la liste, vérifiez le type d'objet que vous avez.

Espérons que cela aide.

+0

Merci beaucoup! Cela fonctionnait très bien, mais comment pourrais-je le déplacer vers le contrôleur de profil correctement? – anater

+1

Je l'ai compris jusqu'à présent. Je poste la réponse. Merci encore pour l'aide! – anater

+0

Pas de problème. Veuillez marquer une réponse comme correcte;) – Hisako

Questions connexes