2016-08-01 2 views
1

Ich versuche, einen Wert über meinen Controller zu holen und es druckt korrekt in meinen Protokollen. Wenn ich dies jedoch aus meiner Sicht drucke, gibt es einen Fehler.Ruby on Rails - Wert korrekt im Log aber nicht in der Ansicht gedruckt

Controller:

@leads = Lead.all.order('updated_at desc') 
    @leads.each do |k| 
     if k.lead_propertiesproperty_id = k.lead_properties.map(&:property_id) 
     properties = Property.where(:id => property_id) 
     category_ids = properties.map(&:property_category_id) 
     categories = PropertyCategory.where(:id => category_ids) 
     @category_names = categories.map(&:name).exists? 

     Rails.logger.debug("categories: #{categories.inspect}") 
     Rails.logger.debug("category_names: #{@category_names.inspect}") 
     else 
     @properties = "No Properties" 
     @locations = "No Locations" 
     end 
    end 
    @leads_total = Lead.all.count 

Ausblick:

<tbody> 
    <% @leads.each do |lead| %> 
    <tr class="<%=cycle('odd', 'even') %> location_row" id="lead_row" data-id="<%= lead.id%>"> 
     <td><%= lead.id %></td> 
     <td><%= lead.fullname %></td> 
     <td><%= lead.email %></td> 
     <td><%= lead.phone %></td> 
     <td><%= @category_names.to_sentence %></td> 
     <td><%= select_tag :status, options_for_select(Lead.statuses.keys.to_a{|k, v| [k.humanize.capitalize, v]}, lead.status), :class => "lead_status"%></td> 
     <td><%= lead.created_at.strftime("%d %b. %Y - %T")%></td> 
     <td><%= link_to (fa_icon "pencil-square-o "), edit_lead_path({:id => lead.id, :first_last_name => lead.first_last_name}), :title => 'Edit Lead', :class => "action-button" %></td> 
    </tr> 
    <% end %> 
    </tbody> 

Der Fehler: Im Controller anmelden es die richtige Kategorie gibt (. ZB Schreibtisch, virtuell, privat) Wert für jede Ableitung, aber in der Ansicht gibt es den Kategoriewert aus der letzten Ableitung für jede Ableitung an.

+0

Was ist der Fehler? –

+0

Es gibt keinen Fehler, es gibt nur den Wert der Eigenschaftskategorie des ersten Bleis an. "Virtuell" .. Stattdessen sollte es die Kategorien der Reihe geben, um die es geht. Ich werde ein Update in der Frage hinzufügen. –

+0

Es ist schwer zu sehen, wo der Fehler ist. Versuchen Sie zu beschreiben, was gewünscht ist und was Sie tatsächlich in der Antwort bekommen. Vielleicht fügen Sie dem Code Kommentare hinzu, um zu zeigen, was er macht. –

Antwort

1

Wenn ich es richtig verstehe, weil @category_names in einer Schleife zugewiesen wird.

So zum Beispiel, wenn das erste Mal die Schleife die Kategorie läuft, ist „Schreibtisch“ die @category_names wird „Schreibtisch“

jedoch zum zweiten Mal die Kategorie läuft „virtuelle“ wird, die die @category_name Variable überschreibt.

Sie müssen die category_names in einen Hash mit der ID des Bleis

@category_names = {} 

@lead.each do |lead| 
    If lead.category_name.is_what_i_want? 
    @category_names[lead.id.to_s] = lead.category_names 
    end 
    end 

Sehr Pseudo schieben, aber das sollten Sie

dann in der Ansicht helfen tun

@category_names [lead .id.to_s] .to_sentence

+0

Super, es funktioniert fast. Leider funktioniert jetzt nur noch der to_sentence nicht mehr. Ich vermute wegen der .to_s? –

+0

Der Fehler, den ich bekomme, ist: undefined Methode 'to_sentence 'für Null: NilClass –

+0

Nie, mind. Ich habe es repariert. Ich musste @category_names [k.id.to_s] = [""] zum else Teil in meinem Controller hinzufügen. –