rails multiple link_to_if link_to link example ruby-on-rails

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 } ) %>



link_to "+ Service", controller_action_path(:account_id => acct.id)

Si aún no funciona, compruebe la ruta:

$ rake routes