2011-05-13 12 views
6

Ok por lo que actualmente tengo una formaCarriles 3 - Pasar user.id en el campo de formulario oculto vs utilizando asociación

<div class="field"> 
    <%= f.label :title %><br/> 
    <%= f.text_field :title %><br/> 
    <%= f.label :itunesurl %><br /> 
    <%= f.text_field :itunesurl %><br /> 
    <%= f.hidden_field :user_id, :value => current_user.id %> 
</div> 
<div class="actions"> 
    <%= f.submit %> 
</div> 

cual pasa el current_user.id en el método de crear mi modelo "aplicación" que crea Quiero ser como esto antes de guardarla:

@app = App.new(params[:app]) 

Sin embargo tengo asociaciones de (pseudo)

user has_many apps 
apps belongs_to user 

pregunta: ¿es Es más seguro (para que el formulario no se modifique) hacer algo como esto dentro del método create?

@user = current_user 
@app = @user.apps.create(params[:app]) 

Si es así ... ¿cómo es exactamente hago para implementar realmente el código anterior (no es sintácticamente correcta .. sólo pseudo)?

Gracias!

Respuesta

1

El segundo fragmento de código es más "RESTful" que el primero. Por más RESTful, quiero decir, si una aplicación es un recurso al que se accede lógicamente a través de un usuario, entonces úsala.

La forma de poner esto en marcha a través de rutas:

resources :users do 
    resources :apps 
end 

esto le dará caminos como user_app_path y new_user_app_path, a la que se pasa un identificador de usuario y un ID de aplicación o una nueva aplicación.

Esperanza esto ayuda

+0

Eso carriles 2 sintaxis. Dado que la pregunta aborda los rieles 3 en las etiquetas lo arreglaré por ti (puedes revertirlo si no lo deseas)] – alternative

+0

Sabía que era una sintaxis de Rails 2 y era demasiado flojo/de prisa para buscar los rieles 3 versión de esto. Gracias por la edición, :) –

4

Es absolutamente seguro que hacerlo de la segunda forma. Si lo haces de la primera manera, estás confiando en que el cliente diga quiénes son. Cualquiera puede modificar fácilmente el formulario (con Firebug, o pueden enviar manualmente una solicitud POST con muchas herramientas) y terminar enviando un formulario con el current_user de otra persona.

Asegúrate de aplicar este pensamiento en todas partes a través de tu aplicación. No confíes en nada que el cliente envíe, nunca.

Cuestiones relacionadas