2016-04-30 6 views
-1

Ich versuche, eine Liste aller von mir erstellten Objekte anzuzeigen. (So ​​genannte „Join“) Im show.html.erb schrieb ichShow zeigt eine Liste von Daten an

<%= @join = Join.all %> 
    <%= @join.each do |join| %> 
    <%= join.email %> 
<% end %> 

und es funktioniert, aber wenn ich auf die Seite bekomme ich eine Reihe von Daten, die sagt: #<Join::ActiveRecord_Relation:0x007fbca99f12b8> [email protected] [#<Join id: 1, email: "[email protected]", created_at: "2016-04-30 12:48:16", updated_at: "2016-04-30 12:48:16">] jemand Kennt wie man los damit?

+0

Anstatt extra '@ join'-Variable zu deklarieren und den ganzen Block zu definieren, können Sie einfach '<% = Join.all.map (&: email) .join ('
')%>' verwenden. – vee

Antwort

2

Ändern <%= @join.each do |join| %> zu <% @join.each do |join| %>. Ruby-Code zwischen <%=...%> wird von Erb-Prozessor geparst und HTML ausgegeben. Das Generieren der HTML-Ausgabe innerhalb des Body jedes Do-Blocks ist in Ordnung, denn das ist, was wir hier wollen, aber jeder-Do-Ausdruck ist rein Rubin und sollte in <% ...%> Ausdruck in HTML.ERB-Datei ausgewertet werden.

In demselben Kontext ändern Sie <%= @join = Join.all %> zu <% @join = Join.all %>. Eigentlich sollten wir Instanzvariable wie @join in der Methode des Controllers erzeugen, anstatt die Ansicht zu überfrachten.

+1

Außerdem ist "Join" ein ziemlich schrecklicher Name für ein Modell. 'Join.joins (: something)' erzeugt SQL wie 'SELECT joins * FROM Joins JOIN something.id ON joins.something_id'. Das liest sich wie etwas von einem [Dr. Seuss] (https://en.wikipedia.org/wiki/Dr._Seuss) Kinderbuch. – max