Hi Jorge,
First of all, you mention that you have to give usuario_id manually
every time you create a post. This doesn't sound right at all to me.
Do you create a post from the name of a user who is currently logged
in? If so, you have his usuario_id in the session, don't you? In the
post#create action you create a new model instance from form
parameters and set the post.usuario_id to session[:usuario_id].
Moreover, if you use one of the standard authentication plugins, you
will have "current_user" available to almost any piece of the
application (controllers, views, helpers), and so you can get your
user ID from that.
Your check then becomes:
own_post = logged_in? && current_user.id == post.usuario_id
To push it a bit further, you may want to move this piece into the
application helper, like this:
def owns?(resource)
logged_in? && current_user.id == resource.usuario_id
end
And then your view becomes:
<% if owns?(post) %>
<td><%= link_to 'Editar', {:action => 'edit', :id => post.id}
%></td>
<% end %>
I didn't go far to the analysis of your error since the solution
doesn't sound right in the first place.
Hope it helps.
- Aleksey
On Jan 19, 2:46 am, Jorge Fernandez <[email protected]> wrote:
> Hello, I have a little question.
>
> I want to an user edit or delete their comments. For it, I have this
> code:
>
> <% if post.usuario_id == session[:usuario_id] %>
> <td><%= link_to 'Editar', {:action => 'edit', :id => post.id}
> %></td>
> <% end %>
>
> You can see that post have a value "usuario_id" where the I must
> completed manually in the new post form. I want to change it and compare
> the name of the commenter:
>
> <% if post.nombre == session[:usuario_nombre] %>
>
> And my code of login:
>
> def login
> if request.post?
> usuario = Usuario.authenticate(params[:nombre],
> params[:password])
> if usuario
> #Here, I changed usuario.id to usuario.nombre to store the name's user
> in the session, right?
> #session[:usuario_nombre] = usuario.nombre
> session[:usuario_id] = usuario.id
> redirect_to(:action => "index")
> else
> flash.now[:notice] = "Usuario o contraseña no válido"
> end
> end
> end
>
> I thought that it could work, but not... I have modified the if sentence
> and the admin_controller and I see that it works for a moment! I logged
> out to try with other user and I received an error. I think that, when
> it works, I have this:
>
> <% if post.nombre == session[:usuario_nombre].nombre %>
>
> And I received this error, I think:
>
> "undefined method `nombre' for 1:Fixnum"
>
> I'm surely that the problem is in the if sentence and/or
> admin_controller, in session[:param] = ...
> --
> Posted viahttp://www.ruby-forum.com/.
--
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.