Helpers, dividere la visualizzazione

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

Il 19 aprile 2010 10.22, Paola A. [email protected] 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

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!!)

2010/4/19 Paola A. [email protected]:

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

2010/4/19 Paola A. [email protected]:

132: <%= sources_quotations person_attestation %>

scusa, ho sbagliato a scrivere, la @ nell’if non ci va:
<% if person_attestation.primary_id %>

pietro

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.

Pietro G. wrote:

2010/4/19 Paola A. [email protected]:

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!