¿Dónde pongo los métodos 'de ayuda'?
-
03-07-2019 - |
Pregunta
En mi aplicación Ruby on Rails, tengo:
class AdminController < ApplicationController
def create
if request.post? and params[:role_data]
parse_role_data(params[:role_data])
end
end
end
y también
module AdminHelper
def parse_role_data(roledata)
...
end
end
Sin embargo, me sale un error que dice que parse_role_data
no está definido. ¿Qué estoy haciendo mal?
Solución
Los helpers se usan principalmente para tareas complejas relacionadas con resultados, como hacer una tabla HTML para el calendario a partir de una lista de fechas. Cualquier cosa relacionada con las reglas comerciales, como analizar un archivo, debe ir en el modelo asociado, un posible ejemplo a continuación:
class Admin < ActiveRecord::Base
def self.parse_role_data(roledata)
...
end
end
#Call in your controller like this
Admin.parse_role_data(roledata)
También busque en (rutas RESTful o la opción: condiciones) [ http: //api.rubyonrails.org/classes/ActionController/Routing.html] al realizar rutas, en lugar de buscar request.post?
en su controlador.
Otros consejos
¿No debería estar accediendo a parse_role_data a través de AdminHelper?
Actualización 1: verifica esto http://www.johnyerhot.com / 2008/01/10 / rails-using-helpers-in-you-controller /
Desde el punto de vista de si está intentando crear una IU para agregar roles a los usuarios. Voy a asumir que ya tienes un controlador de usuario, por lo que te sugeriría agregar un modelo de roles y un controlador de roles. En tus rutas.rb harías algo como:
map.resources :users do |u|
u.resources :roles
end
Esto te permitirá tener una ruta como:
/users/3/roles
En tu RolesController harías algo como:
def create
@user = User.find_by_username(params[:user_id])
@role = @user.roles.build(params[:role])
if @role.valid?
@role.save!
redirect_to @user
else
render :action => 'new'
end
end
Esto tomará los datos de parámetros de rol del formulario que se muestra en la nueva acción y creará un nuevo modelo de rol para este usuario. Espero que este sea un buen punto de partida para ti.