Forum: Italian Ruby user group link_to con il blocco...

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Alessandro A. (Guest)
on 2009-03-26 22:47
Ciao
ho un link su una pagina fatto cosi':

<%= link_to "Message", :controller => "messages",:action => "inbox"%>

e funziona alla grande.

Ora pero' voglio aggiungere il numero di messaggi non letti al link, e
ho provato a fare cosi':


<% link_to("inbox", :controller => "messages",:action => "inbox") do %>
  Messages
  <% if
(@unread_message=Recipient.unread_message(current_user.id).length) >0 %>
    <span class="lblBold">(<%=  @unread_message %>)</span>
  <%  end %>
<% end %>


Ma non funziona. in pratica il :controller e :action non vengono presi
in considerazione. Ma viene preso in cosiderazione solo il primo "inbox"

Come posso fare?

Grazie
ciao
Alessandro
Andrea C. (Guest)
on 2009-03-26 23:49
(Received via mailing list)
ok, partiamo dal presupposto che non stiamo usando php.

il tuo primo link funziona si, ma non usi restful, sarebbe meglio
avere una cosa del tipo

<%= link_to "Messages", messages_path %>

per quanto riguarda il secondo è un qualche cosa di incomprensibile,
suppongo che il tuo framework rails sia dello stesso parere, non sa
semplicemente che dire, sta lì, forse ti osserva :]

forse stai sbagliando approccio, unread_messages andrebbe definito nel
modello User.

current_user.unread_messages.empty? mi sembra leggermente meglio.

cmq resta il fatto che non capisco cosa vuoi fare dentro al "do" (che
ovviamente link_to non accetta)

per passare un parametro con il link_to puoi fare una cosa del tipo

<%= link_to "Messages", messages_path(:mio_parametro => 'banana') %>

oppure se sei un tipo un po più rude

<%= link_to "Messages", :controller => :messages, :action
=> :index, :mio_parametro => 'banana' %>


Q
Alessandro A. (Guest)
on 2009-03-27 00:27
Andrea C. wrote:
> ok, partiamo dal presupposto che non stiamo usando php.
>
> il tuo primo link funziona si, ma non usi restful, sarebbe meglio
> avere una cosa del tipo
>
> <%= link_to "Messages", messages_path %>

si l'avevo letto... ma (per mia ignoranza) non mi trovo molto con i
path...
correggimi se sbaglio dovrei definire dentro routes.rb una riga cosi':

map.messages '/messages/inbox', :controller => "messages",:action =>
"inbox"

ma il vantaggio quale è?


> forse stai sbagliando approccio, unread_messages andrebbe definito nel
> modello User.
> current_user.unread_messages.empty? mi sembra leggermente meglio.

si, hai ragione...



> cmq resta il fatto che non capisco cosa vuoi fare dentro al "do" (che
> ovviamente link_to non accetta)
>
> per passare un parametro con il link_to puoi fare una cosa del tipo

aspetta, mi sono spiegato male...
lo scopo non è passare un parametro, ma semplicemente visualizzare nel
link il numero di messaggi non letti: vorrei ottenere questo:

    <a href="/messages/inbox">
      Message
      <span class="lblBold">(2)</span>
    </a>

(mentre invece ottengo questo)

    <a href="inbox" action="inbox" controller="messages">
      Messages
      <span class="lblBold">(2)</span>
    </a>

Grazie, anche del consiglio su dove mettere gli unread message...

Ciao
Andrea C. (Guest)
on 2009-03-27 01:11
(Received via mailing list)
On 26 Mar 2009, at 22:27, Alessandro A. wrote:

> correggimi se sbaglio dovrei definire dentro routes.rb una riga cosi':
>
> map.messages '/messages/inbox', :controller => "messages",:action =>
> "inbox"
>
> ma il vantaggio quale è?
>

tutti i controller funzionano nello stesso modo con gli stessi metodi,
utilizzi il controller come una risorsa sequando il pattern CRUD come
per i modelli.
il vantaggio è che hai delle url sensate, codice più semantico e
leggibile, ovviamente ti aiuta anche a riutilizzare il codice, ad
esempio utilizzando stessi controller ma con url e quindi compiti
diversi, se nella tua app hai messaggi magari vuoi utilizzarli in modo
diverso (polimorfismo) per associarli a utenti o gruppi avendo cose
del tipo Users/1/messages oppure groups/1/messages

se da console lanci questo comando e vedi tutte le routes già definite

rake routes
o magari (sperando che nn hai windows)
rake routes | grep BLALBABLA

come hai detto tu hai routes.rb per definire TUTTE le tue routes e
come sono associate fra di loro
ah la tua definizione della route è medievale, se il msg è associato
all utente dovresti fare una cosa del tipo

map.resources :users do |users|
  users.resources  :message
end

dopo che hai definito questa route prova a vedere che url ti genera
lanciando "rake routes"

>
>> forse stai sbagliando approccio, unread_messages andrebbe definito
>> nel
>> modello User.
>> current_user.unread_messages.empty? mi sembra leggermente meglio.
>
> si, hai ragione...
grazie :]
> lo scopo non è passare un parametro, ma semplicemente visualizzare nel
>      Messages
>      <span class="lblBold">(2)</span>
>    </a>
>
> Grazie, anche del consiglio su dove mettere gli unread message...
>

<%= link_to "Messages(#{current_user.unread_messages.length)",
user_messages_path(current_user) %>

oppure in modo medievale

<%= link_to
"Messages(#{current_user.unread_messages.length)", :controller
=> :messages, :action => :index, :user_id => current_user  %>


cmq sul serio, non è php :]


Q
Alessandro A. (Guest)
on 2009-03-27 02:21
Andrea C. wrote:
> On 26 Mar 2009, at 22:27, Alessandro A. wrote:
>...
> dopo che hai definito questa route prova a vedere che url ti genera
> lanciando "rake routes"

grazie, devo mettermi a studiamelo con calma


>> lo scopo non � passare un parametro, ma semplicemente visualizzare nel
>>      Messages
>>      <span class="lblBold">(2)</span>
>>    </a>
>>
>> Grazie, anche del consiglio su dove mettere gli unread message...
>>
>
> <%= link_to "Messages(#{current_user.unread_messages.length)",
> user_messages_path(current_user) %>
>
> oppure in modo medievale
>
> <%= link_to
> "Messages(#{current_user.unread_messages.length)", :controller
> => :messages, :action => :index, :user_id => current_user  %>
>

si, ok, ma io tentavo la strada del block per avere il numerino in
grassetto...
Ora per questo esempio specifico potrei anche rinunciare al bold, ma mi
interessava comunque capire la fattibilità.


> cmq sul serio, non � php :]

:) guarda php è un linguaggio che non conosco per nulla...
io provengo principalmente da java (e prima di java c, c++) e in
quest'ultimo anno mi sono messo a studiare per conto mio un po' ruby e
un po' python.
php al momento l'ho trascurato (non vorrei fare un minestrone e non
concludere nulla).

Ciao, e grazie!
Andrea C. (Guest)
on 2009-03-27 02:28
(Received via mailing list)
On 27 Mar 2009, at 00:21, Alessandro A. wrote:

>>> visualizzare nel
>>>     Messages
>>>     <span class="lblBold">(2)</span>
>>>   </a>
>>>
>>> Grazie, anche del consiglio su dove mettere gli unread message...
>>>

<%= link_to "<strong>#{...}</strong>" ...
Alessandro A. (Guest)
on 2009-03-27 11:06
Andrea C. wrote:
> On 27 Mar 2009, at 00:21, Alessandro A. wrote:
>
>>>> visualizzare nel
>>>>     Messages
>>>>     <span class="lblBold">(2)</span>
>>>>   </a>
>>>>
>>>> Grazie, anche del consiglio su dove mettere gli unread message...
>>>>
>
> <%= link_to "<strong>#{...}</strong>" ...

giusto...
ma con il block non c'era proprio modo (ormai mi è rimasta la curiosità)

Grazie
Luigi M. (Guest)
on 2009-03-27 11:17
Ciao Alessandro,
perdonami se mi intrometto ma non ho capito se riesci a contare i
messaggi non letti.

Luigi
Pietro G. (Guest)
on 2009-03-27 11:39
(Received via mailing list)
Il 27 marzo 2009 10.06, Alessandro A. <removed_email_address@domain.invalid> ha 
scritto:
> ma con il block non c'era proprio modo (ormai mi è rimasta la curiosità)

ciao, non sono intervenuto finora perché non l'ho mai usato ma, per
quanto tutti ti stiano dicendo che link_to col block non c'entra
niente, mi sembrava di ricordare distintamente che in rails 2.2 (o
2.3?) hanno introdotto il block in link_to; ho controllato e qui:

http://api.rubyonrails.org/classes/ActionView/Help...

si vedono esempi tipo:

  <% link_to(@profile) do %>
    <strong><%= @profile.name %></strong> -- <span>Check it out!!</span>
  <% end %>


pietro
Alessandro A. (Guest)
on 2009-03-27 15:06
Luigi M. wrote:
> Ciao Alessandro,
> perdonami se mi intrometto ma non ho capito se riesci a contare i
> messaggi non letti.
>
> Luigi

Ciao,
riesco riesco, quella parte funzionava.
Il suggerimento di Q è (o almeno io l'ho interpretato cosi') più su come
ho pensato gli oggetti:
logicamente è più corretto che io parta dall'utente per sapere quanti
messaggi deve ancora leggere, ma non ci avevo pensato.
Il metodo invece di essere sui destinatari dovrebbe essere sull'utente.
Probabilmente mi è venuto da metterlo li, perchè la tabella destinatari
ha la colonna che mi indica se il messaggio è stato letto...
(in pratica è user_id, message_id, is_read)

Comunque funziona (e al momento ancora non l'ho spostato su user).

Ciao
Alessandro
Alessandro A. (Guest)
on 2009-03-27 15:09
Pietro G. wrote:
> Il 27 marzo 2009 10.06, Alessandro A. <removed_email_address@domain.invalid> ha scritto:
>> ma con il block non c'era proprio modo (ormai mi � rimasta la curiosit�)

> ciao, non sono intervenuto finora perch� non l'ho mai usato ma, per
> quanto tutti ti stiano dicendo che link_to col block non c'entra
> niente, mi sembrava di ricordare distintamente che in rails 2.2 (o
> 2.3?) hanno introdotto il block in link_to; ho controllato e qui:
>
> http://api.rubyonrails.org/classes/ActionView/Help...
>
> si vedono esempi tipo:
>
>   <% link_to(@profile) do %>
>     <strong><%= @profile.name %></strong> -- <span>Check it out!!</span>
>   <% end %>
>
>
> pietro

si l'avevo visto, ed è da li che sono partito.
Probabilmente la mia scarsissima dimistichezza con i path (o simili) mi
ha impedito di farlo funzionare.
Forse visto che è una novità (io sono nuovo, quindi non ci avevo fatto
caso), il blocco con i link non supporta il modo "medievale" che uso io
con action e controller esplicitati.

Non mi resta quindi che aggiornarmi :)
(comunque se qualcuno ci riesce  me lo fa sapere?)


Ciao, grazie
Alessandro
Silvano S. (Guest)
on 2009-03-27 15:31
(Received via mailing list)
Ciao Alessandro,
ciao a tutti,

se ho capito bene il tuo primo messaggio, il problema sta nel modo in
cui passi  gli argomenti a link_to: quando usi un block, gli argomenti
di link_to  devono scalare di posto. Il tuo codice dovrebbe diventare:

<% link_to(:controller => "messages",:action => "inbox") do %>
  [contenuto del blocco, scritto come l'avevi scritto tu o ripensato
come suggerito da Andrea]
<% end %>

Te ne accorgi anche da una nota presente nella documentazione Rails:

  link_to(name, options = {}, html_options = nil)
  link_to(options = {}, html_options = nil) do
    # name
  end

Ciao,
Silvano

2009/3/27 Alessandro A. <removed_email_address@domain.invalid>:
>>
> Probabilmente la mia scarsissima dimistichezza con i path (o simili) mi
> Alessandro
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ml mailing list
> removed_email_address@domain.invalid
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Considera l'ambiente prima di stampare questa email. Dai, che
l'equazione è semplice: meno A4, più alberi.


. . . Silvano S. . . .
email: removed_email_address@domain.invalid
site: http://www.sistrall.it
Alessandro A. (Guest)
on 2009-03-27 16:29
Silvano S. wrote:
> Ciao Alessandro,
> ciao a tutti,
>
> se ho capito bene il tuo primo messaggio, il problema sta nel modo in
> cui passi  gli argomenti a link_to: quando usi un block, gli argomenti
> di link_to  devono scalare di posto. Il tuo codice dovrebbe diventare:
>
> <% link_to(:controller => "messages",:action => "inbox") do %>
>   [contenuto del blocco, scritto come l'avevi scritto tu o ripensato
> come suggerito da Andrea]
> <% end %>
>
> Te ne accorgi anche da una nota presente nella documentazione Rails:
>
>   link_to(name, options = {}, html_options = nil)
>   link_to(options = {}, html_options = nil) do
>     # name
>   end
>


giusto... pensa che l'avevo pure letto, ma evidentemente con
disattenzione...

visto ora è cosi' chiaro che mi sembra assurdo che non ci sia arrivato
da solo senza disturbarvi...


devo smetterla di mettermi a leggere documentazione dopo una certa ora
;-)

Grazie
Ciao
Luigi M. (Guest)
on 2009-03-27 16:43
Ti chiedevo se riesci a valutare il numero di messaggi perché puoi, in
alternativa al link_to, utilizzare il codice esplicito che ti permette,
almeno a mio parere di avere il massimo controllo.
Tu desideri un link del tipo:
  <a href="/messages/inbox/">
      Message
      <span class="lblBold">(2)</span>
    </a>


se nel routes hai:
map.messages '/messages/inbox', :controller => "messages",:action =>
"inbox"

nella view io utilizzerei:

<a href="<%=messages_url()-%>">Message <span
class="lblBold"><%=current_user.unread_messages.length-%></span></a>

Anzi per aggiungere qualcos'altro di sicuramente utile modificherei
routes per renderlo maggiormente "robot friendly":
map.messages '/messages/inbox/unreaded.html',
:controller => "messages",
:action =>"inbox"

Spero di aver compreso bene il tuo problema!

Luigi
This topic is locked and can not be replied to.