Unless

hola amigos!

Tengo una clase profile con un has_many :friends. El caso es que en la
vista add_friend quiero que solo salga un link si el profile en concreto
no es amigo ya del usuario que lo visita.

El caso es que queria utilizar la clausula ‘unless’ para hacer esto y
seguro que una tonteria pero soy algo novatillo en estos temas y me he
quedado enfrascado aqui. Os pongo el trozo de codigo que me falla a ver
si me podeis ayudar por poco que sea.

Muchas gracias!

<% for friend in @user.profile.friends.find(:all) %>
<% unless profile.id == friend.friend2 %>
<%= link_to ‘Be my friend!!’, :action => ‘add_friend’, :id => @profile
%>
<% end %>
<% end %>

en friend2 guardo la id del usuario que recibira la peticion

Hola, pregunta:

el valor de profile.id existe?
es decir, cuando lo llamas tiene algún valor, porque viendo el código
que
tienes, es probable que profile.id sea nil
Saludos

On Dec 23, 2007 9:52 AM, Javi J.
[email protected]

On Dec 23, 2007 7:52 AM, Javi J.
[email protected] wrote:

Tengo una clase profile con un has_many :friends. El caso es que en la
vista add_friend quiero que solo salga un link si el profile en concreto
no es amigo ya del usuario que lo visita.

Creo que quieres algo
así:
<%= link_to ‘Be my friend!!’, :action => ‘add_friend’, :id => algo %>
unless user.!has_friend (friend)

Donde friend sería el amigo y user sería el usuario.
Si quieres hacerlo para varios usuarios solo lo metes en un each como
lo demostraste en el ejemplo.

PD: has_friend sería el método que te dice si es amigo o no.

On Dec 23, 2007 2:10 PM, Federico B. [email protected]
wrote:

<%= link_to ‘Be my friend!!’, :action => ‘add_friend’, :id => algo %>
unless user.!has_friend (friend)

El unless obviamente debe estar dentro de <%, no al aire como lo deje
en el ejemplo.

Federico B. wrote:

On Dec 23, 2007 7:52 AM, Javi J.
[email protected] wrote:

Tengo una clase profile con un has_many :friends. El caso es que en la
vista add_friend quiero que solo salga un link si el profile en concreto
no es amigo ya del usuario que lo visita.

Creo que quieres algo
as�:
<%= link_to ‘Be my friend!!’, :action => ‘add_friend’, :id => algo %>
unless user.!has_friend (friend)

Donde friend ser�a el amigo y user ser�a el usuario.
Si quieres hacerlo para varios usuarios solo lo metes en un each como
lo demostraste en el ejemplo.

PD: has_friend ser�a el m�todo que te dice si es amigo o no.

Muchas gracias probare lo que me has dicho!!

Miguel Michelson wrote:

Hola, pregunta:

el valor de profile.id existe?
es decir, cuando lo llamas tiene algún valor, porque viendo el código
que
tienes, es probable que profile.id sea nil
Saludos

Si que tiene valor copie mal, es @profile

La linea del unless no debe llevar el <%= sino el <%, no se si sera eso.

Una consulta, lo que estas intentando hacer es un sistema de amigos, el
típico de las redes sociales no? Te comento hay varios plugins que te
pueden
ayudar a hacer esto en 2 minutos.

En [1] si pones friend en el buscador encontraras por lo menos 3 que
hacen
esto.

[1] http://agilewebdevelopment.com/plugins/

saludos,
Juan P…

On Dec 29, 2007 1:59 PM, Javi J.
[email protected]

Hola,

Hace unos dias que escribi pq tenia un problema con el unless. Lo que me
habeis comentado no he podido probarlo estos dias por las fiestas, pero
hoy que he continuado con esto no consigo sacarlo, a ver si alguien sabe
donde estoy fallando.

en la vista tengo esto:

<%= unless @user.profile.has_friend(@profile.id) %>
<%= link_to “Be Water My Friend”, {:action => ‘add_friend’, :id =>
@profile.id} %>
<% end %>

El unless posiblement este mal… pero he probado mil cosas y me estoy
volviendo loco.

Y en el controlador tengo esto:
def add_friend
@user = User.find(session[:user_id])
@profile = Profile.find(params[:id])
fr = Friend.new
fr.friend1 = @user.profile.id
fr.friend2 = @profile.id
fr.save
end

def has_friend
@user = User.find(params[:id])
end

El has_friend debe estar mal, pero no se como ponerle que en la vista no
me ponga el link una vez son amigos.

Muchas gracias y saludos!!

Manuel González Noriega wrote:

On 29/12/2007, Javi J. [email protected] wrote:

<%= link_to “Be Water My Friend”, {:action => ‘add_friend’, :id =>
@profile = Profile.find(params[:id])
El has_friend debe estar mal, pero no se como ponerle que en la vista no
me ponga el link una vez son amigos.

Muchas gracias y saludos!!

Varias cosas sobre has_friend

  • deberí¡ comprobar que A y B son amigos ?no? Y no haces nada de eso
  • deberí¡ ser un mé´¯do del modelo User, no del controlador

Tienes razon no comprovaba si eran amigos pq primero queria resolver la
duda del unless y gracias por lo segundo , no me habia dado cuenta q
tenia q ponerlo en el modelo, voy a seguir trabajando en eso, gracias!!

Juan P. wrote:

La linea del unless no debe llevar el <%= sino el <%, no se si sera eso.

Una consulta, lo que estas intentando hacer es un sistema de amigos, el
típico de las redes sociales no? Te comento hay varios plugins que te
pueden
ayudar a hacer esto en 2 minutos.

En [1] si pones friend en el buscador encontraras por lo menos 3 que
hacen
esto.

[1] http://agilewebdevelopment.com/plugins/

saludos,
Juan P…

Muchas gracias, si va a ser algo parecido a una red social pero basico,
es para un proyecto de la uni asi qu eno se si deberia usar plugins, de
todas formas lo voy a considerar seriamente ejejeej

Muchas gracias!

On 29/12/2007, Javi J. [email protected] wrote:

<%= link_to “Be Water My Friend”, {:action => ‘add_friend’, :id =>
@profile = Profile.find(params[:id])
El has_friend debe estar mal, pero no se como ponerle que en la vista no
me ponga el link una vez son amigos.

Muchas gracias y saludos!!

Varias cosas sobre has_friend

  • debería comprobar que A y B son amigos ¿no? Y no haces nada de eso
  • debería ser un método del modelo User, no del controlador
  • es mejor que acabes esos métodos en interrogante (has_friend?) Así
    harás simplemente
    @mafalda.has_friend?(@miguelito)

A mi me gustaría más un nombre como is_friend_of? para que se leyese
@mafalda.is_friend_of?(@miguelito), pero eso ya es cuestión de gustos

En definitiva,

  • mueve el método a a método de instancia de User
  • renombralo a has_friend?
  • haz que acepte un parámetro “other_user” o “other_user_id”
  • comprueba que A y B sean amigos y devuelve true o false en función de eso

Con eso te funcionaría el unless, dejando aparte de que
estáshaciendo<%= unless cuando no quieres imprimir nada en esa línea, pero
eso puede que sólo sea un problema de
transcripción.

Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.