ruby on rails - multiple - Rieles: paso de parámetros en link_to
rails link_to controller action (3)
En primer lugar, link_to es un helper de etiquetas html, su segundo argumento es url, seguido de html_options. Lo que le gustaría es pasar account_id como un parámetro url a la ruta. Si ha configurado rutas con nombre correctamente en routes.rb, puede usar ayudantes de ruta.
link_to "+ Service", new_my_service_path(:account_id => acct.id)
Creo que la mejor práctica es pasar los valores del modelo como un param anidado en:
link_to "+ Service", new_my_service_path(:my_service => { :account_id => acct.id })
# my_services_controller.rb
def new
@my_service = MyService.new(params[:my_service])
end
Y necesita controlar ese account_id está permitido para ''asignación masiva''. En los rieles 3 puede usar potentes controles para filtrar parámetros válidos dentro del controlador al que pertenece. Te lo recomiendo mucho.
http://apidock.com/rails/ActiveModel/MassAssignmentSecurity/ClassMethods
También tenga en cuenta que si account_id no se establece libremente por el usuario (por ejemplo, un usuario solo puede enviar un servicio para el propio account_id, entonces es mejor práctica no enviarlo a través de la solicitud, sino configurarlo dentro del controlador agregando algo me gusta:
@my_service.account_id = current_user.account_id
Seguramente puede combinar los dos si solo permite a los usuarios crear un servicio en su propia cuenta, pero permite que el administrador cree cualquiera utilizando roles en attr_accessible.
espero que esto ayude
La página de índice de Mis cuentas enumera todas las cuentas, y por cuenta tiene un enlace a "+ Servicio"; esto debería dirigir al usuario a la página / my_services / new y rellenar previamente el campo account_id con la ID correspondiente, según el enlace en el que se haya hecho clic en la página de índice de Cuentas.
Tengo depuración (params) en la parte inferior de cada página, y con lo que estoy intentando, no obtengo nada más que: controlador y: acción que aparece en mis parámetros para la página / my_services / new.
El enlace que he estado intentando es el siguiente:
link_to "+ Service", "my_services/new", :account_id => acct.id
Entonces también tengo lógica en el controlador de servicios:
def new
@my_service = MyService.new
if params[:account_id]
@my_service.account_id = params[:account_id]
end
end
¿Alguien puede ayudar con la forma correcta de hacer esto? Todavía no he podido hacerlo funcionar con algunas cosas desagradables que probé.
EDITAR
Resulta que, si alguien está mirando esta respuesta en el futuro, los recursos anidados (posiblemente con la opción shallow: true
en routes.rb) parecen ser el camino a seguir. Mi routes.rb para esta parte ahora se ve así:
resources :accounts, shallow: true do
resources :services
end
Mis enlaces ahora se ven así:
<%= link_to "+ Service", new_service_path(:service => { :account_id => @account.id } ) %>
Prueba esto
link_to "+ Service", my_services_new_path(:account_id => acct.id)
pasará el account_id como quieras.
Para obtener más detalles sobre link_to use este http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
link_to "+ Service", controller_action_path(:account_id => acct.id)
Si aún no funciona, compruebe la ruta:
$ rake routes