# Helpers, dividere la visualizzazione

**URL:** <https://www.ruby-forum.com/t/helpers-dividere-la-visualizzazione/187177>\
**Category:** IT\
**Created:** [April 19, 2010, 10:22am UTC](https://www.ruby-forum.com/t/helpers-dividere-la-visualizzazione/187177 "2010-04-19T10:22:02Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![corto\_maltese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f07891/32.png) [@corto\_maltese](https://www.ruby-forum.com/u/corto_maltese)\
**Post date:** [April 19, 2010, 10:22am UTC](https://www.ruby-forum.com/t/helpers-dividere-la-visualizzazione/187177/1 "2010-04-19T10:22:02Z")

</div>

Buongiorno,  
passo al problema numero 2.

Ho un model Persone, in cui vengono elencati tutti i personaggi storici  
fra il 774 e il 1115. Nello show di ogni persona, visualizzo le cariche  
amministrative ricoperte, le fonti che le citano e gli studi che sono  
stati fatti su di essi.  
Fonti e Studi sono due modelli divisi, uno si chiama Primaries e l’altro  
Secondaries. La tabella di collegamento fra Persone e Fonti Ã¨ una sola e  
si chiama Person\_Attestation.

In app/views/people/show.html.erb dopo tutti i dati della persona ci  
sono quindi queste due parti:

### Attestations

\<% @person.person\_attestations.each do |source| %\>

- \<%=h @person.name %\>:  
 \<%= sources\_quotations source %\>   

\<% end %\>

\<% if session[:user\_id] %\>  
\<%= link\_to “Add Sources »”, :controller =\> “person\_attestations”,  
:action =\> “new”, :person\_id =\> @person %\>  
\<% end -%\>

### Studies

\<% @person.person\_attestations.each do |person\_attestation| %\>

- \<%=h @person.name %\>:  
 \<%= studies\_quotations person\_attestation %\>   

\<% end %\>

\<% if session[:user\_id] %\>  
\<%= link\_to “Add Studies;”, :controller =\> “person\_attestations”,  
:action =\> “new”, :person\_id =\> @person %\>  
\<% end -%\>

che rimandano all’helper person\_attestation\_helper:

def sources\_quotations source  
if source.primary\_id  
result = []  
result \<\< " #{h source.quotation}  
" if  
source.quotation.present?  
result \<\< " _#{h source.primary.title}_" if  
source.secondary.title.present?  
# tutti gli altri attributi  
result.join ‘’  
else  
“non ci sono record”  
end  
end

```
def studies_quotations person_attestation
  if person_attestation.secondary_id
  result = []
  result << " <q>#{h person_attestation.quotation}</q><br />" if

```

person\_attestation.quotation.present?  
result \<\< " _#{h person\_attestation.secondary.title}_" if  
person\_attestation.secondary.title.present?  
# tutti gli altri attributi  
result.join ‘’"  
else  
“non ci sono record”  
end  
end

in questo modo mi recupera solo le attestazioni primary, quindi le fonti  
nel primo e solo gli study (secondary) nel secondo, quindi divide le due  
visualizzazioni, ma ovviamente ogni volta che inserisco il record  
nell’uno o nell’altro, mi viene anche un nuova attestazione “vuota” con  
la frase “non ci sono record”. un’altra soluzione? devo dividere in due  
person\_attestation e duplicarlo, uno per fonti e uno per studi?  
Grazie in anticipo  
paola

---

<div class="post-metadata">

**Author:** ![corto\_maltese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f07891/32.png) [@corto\_maltese](https://www.ruby-forum.com/u/corto_maltese)\
**Post date:** [April 19, 2010, 10:46am UTC](https://www.ruby-forum.com/t/helpers-dividere-la-visualizzazione/187177/2 "2010-04-19T10:46:34Z")

</div>

Il 19 aprile 2010 10.22, Paola A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> Buongiorno,  
> passo al problema numero 2.  
> […]  
> in questo modo mi recupera solo le attestazioni primary, quindi le fonti  
> nel primo e solo gli study (secondary) nel secondo, quindi divide le due  
> visualizzazioni, ma ovviamente ogni volta che inserisco il record  
> nell’uno o nell’altro, mi viene anche un nuova attestazione “vuota” con  
> la frase “non ci sono record”. un’altra soluzione? devo dividere in due  
> person\_attestation e duplicarlo, uno per fonti e uno per studi?

Ci sono due possibili soluzioni:

Soluzione 1  
Domanda: esistono person\_attestations che non hanno né primary\_id né  
secondary\_id?  
Se sì, aggiungi una condizione ai due helper:

def sources\_quotations source  
if source.primary\_id  
…  
else  
“non ci sono record” unless source.secondary\_id # ← solo se  
davvero  
end  
end

def studies\_quotations person\_attestation  
if person\_attestation.secondary\_id  
…  
else  
“non ci sono record” unless person\_attestation.primary\_id # ←   
solo se davvero  
end  
end

Se no, butta semplicemente l’else.

Soluzione 2 (più impervia)  
Separa i risultati, ovvero fai in modo di avere un array di soli  
primary e uno di soli secondary. In base a come è strutturato il tutto  
può essere più o meno facile, fai tu.

pietro

---

<div class="post-metadata">

**Author:** ![corto\_maltese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f07891/32.png) [@corto\_maltese](https://www.ruby-forum.com/u/corto_maltese)\
**Post date:** [April 19, 2010, 11:12am UTC](https://www.ruby-forum.com/t/helpers-dividere-la-visualizzazione/187177/3 "2010-04-19T11:12:53Z")

</div>

Pietro G. wrote:

> Ci sono due possibili soluzioni:
> 
> Soluzione 1  
> Domanda: esistono person\_attestations che non hanno nï¿½ primary\_id nï¿½  
> secondary\_id?  
> Se sï¿½, aggiungi una condizione ai due helper:
> 
> def sources\_quotations source  
> if source.primary\_id  
> …  
> else  
> “non ci sono record” unless source.secondary\_id # \<-- solo se  
> davvero  
> end  
> end
> 
> def studies\_quotations person\_attestation  
> if person\_attestation.secondary\_id  
> …  
> else  
> “non ci sono record” unless person\_attestation.primary\_id # \<–  
> solo se davvero  
> end  
> end
> 
> Se no, butta semplicemente l’else.

la risposta Ã¨ no, hanno per forza o primary\_id o secondary\_id, ho  
buttato l’else ma mi visualizza cmq un campo vuoto perchÃ© recupera \<%  
@person.person\_attestations.each do |person\_attestation| %\> (giusto?)

Studies

Adalberto:  
il mio cane popper

Show | Edit | Destroy

Adalberto:

Show | Edit | Destroy

come faccio a dirgli else non mi visualizzare niente?

(ps: grazie grazie grazie!!)

---

<div class="post-metadata">

**Author:** ![corto\_maltese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f07891/32.png) [@corto\_maltese](https://www.ruby-forum.com/u/corto_maltese)\
**Post date:** [April 19, 2010, 11:36am UTC](https://www.ruby-forum.com/t/helpers-dividere-la-visualizzazione/187177/4 "2010-04-19T11:36:55Z")

</div>

2010/4/19 Paola A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Adalberto:
> 
> Show | Edit | Destroy
> 
> come faccio a dirgli else non mi visualizzare niente?

Prova con:

### Attestations

\<% @person.person\_attestations.each do |source| %\>  
\<% if @source.primary\_id %\>

  
- \<%=h @person.name %\>:  
  
\<%= sources\_quotations source %\>   
  
  

  
\<% if session[:user\_id] %\>  
\<%= link\_to “Add Sources »”, :controller =\>  
“person\_attestations”, :action =\> “new”, :person\_id =\> @person %\>  
\<% end -%\>  
\<% end %\>  
\<% end %\>

### Studies

\<% @person.person\_attestations.each do |person\_attestation| %\>  
\<% if @source.secondary\_id %\>

  
- \<%=h @person.name %\>:  
  
\<%= studies\_quotations person\_attestation %\>   
  
  

```
<% if session[:user_id] %>
  <%= link_to "Add Studies;", :controller =>

```

“person\_attestations”, :action =\> “new”, :person\_id =\> @person %\>  
\<% end -%\>  
\<% end -%\>  
\<% end -%\>

pietro

---

<div class="post-metadata">

**Author:** ![corto\_maltese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f07891/32.png) [@corto\_maltese](https://www.ruby-forum.com/u/corto_maltese)\
**Post date:** [April 19, 2010, 12:00pm UTC](https://www.ruby-forum.com/t/helpers-dividere-la-visualizzazione/187177/5 "2010-04-19T12:00:21Z")

</div>

2010/4/19 Paola A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> 132: \<%= sources\_quotations person\_attestation %\>   
>   
> scusa, ho sbagliato a scrivere, la @ nell’if non ci va:  
> \<% if person\_attestation.primary\_id %\>

pietro

---

<div class="post-metadata">

**Author:** ![corto\_maltese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f07891/32.png) [@corto\_maltese](https://www.ruby-forum.com/u/corto_maltese)\
**Post date:** [April 19, 2010, 11:51am UTC](https://www.ruby-forum.com/t/helpers-dividere-la-visualizzazione/187177/6 "2010-04-19T11:51:31Z")

</div>

ho messo

### Attestations

\<% @person.person\_attestations.each do |person\_attestation| %\>  
\<% if @person\_attestation.primary\_id %\>

- \<%=h @person.name %\>:  
 \<%= sources\_quotations person\_attestation %\>   
 \<%= link\_to 'Show', person\_attestation %\> \<% if session[:user\_id] %\> | \<%= link\_to 'Edit', edit\_person\_attestation\_path(person\_attestation) %\> | \<%= link\_to 'Destroy', person\_attestation, :confirm =\> 'Are you sure?', :method =\> :delete %\> \<% end -%\> 

\<% end %\> \<% end %\>

\<% if session[:user\_id] %\>  
\<%= link\_to “Add Sources »”, :controller =\> “person\_attestations”,  
:action =\> “new”, :person\_id =\> @person %\>  
\<% end -%\>

### Studies

\<% @person.person\_attestations.each do |person\_attestation| %\>  
\<% if @person\_attestation.secondary\_id %\>

- \<%=h @person.name %\>:  
 \<%= studies\_quotations person\_attestation %\>   
 \<%#= person\_quotations person\_attestation %\>   

```
<small>

```

\<%= link\_to ‘Show’, person\_attestation %\>  
\<% if session[:user\_id] %\>  
|  
\<%= link\_to ‘Edit’, edit\_person\_attestation\_path(person\_attestation)  
%\> |  
\<%= link\_to ‘Destroy’, person\_attestation, :confirm =\> ‘Are you  
sure?’, :method =\> :delete %\>  
\<% end -%\>

\<% end %\> \<% end %\>

\<% if session[:user\_id] %\>  
\<%= link\_to “Add Studies;”, :controller =\> “person\_attestations”,  
:action =\> “new”, :person\_id =\> @person %\>  
\<% end -%\>

ma mi da errore  
undefined method `primary\_id’ for nil:NilClass  
Extracted source (around line #129):

126:

### Attestations
  
127:  
128: \<% @person.person\_attestations.each do |person\_attestation| %\>  
129: \<% if @person\_attestation.primary\_id %\>  
130: 
  
131: - \<%=h @person.name %\>:  
  
132: \<%= sources\_quotations person\_attestation %\>   

se pensi che sia il caso di sostituire |person\_attestation| con |source|  
e di conseguenza person\_attestation.primary\_id con source.primary\_id  
lo faccio.

---

<div class="post-metadata">

**Author:** ![corto\_maltese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f07891/32.png) [@corto\_maltese](https://www.ruby-forum.com/u/corto_maltese)\
**Post date:** [April 19, 2010, 12:04pm UTC](https://www.ruby-forum.com/t/helpers-dividere-la-visualizzazione/187177/7 "2010-04-19T12:04:04Z")

</div>

Pietro G. wrote:

> 2010/4/19 Paola A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):
> 
> > 132: ï¿½ ï¿½ \<%= sources\_quotations person\_attestation %\>   
> >   
> > scusa, ho sbagliato a scrivere, la @ nell’if non ci va:  
> > \<% if person\_attestation.primary\_id %\>
> 
> pietro

perfetto, sembra funzionare alla perfezione! grazie, ci ho passato tutto  
ieri e fra if e altro ormai ero arrivata alla frutta!
