Où est-ce que je mets des méthodes "d'assistance"?
-
03-07-2019 - |
Question
Dans mon application Ruby on Rails, j'ai:
class AdminController < ApplicationController
def create
if request.post? and params[:role_data]
parse_role_data(params[:role_data])
end
end
end
et aussi
module AdminHelper
def parse_role_data(roledata)
...
end
end
Je reçois une erreur en disant que parse_role_data ??code> n'est pas défini. Qu'est-ce que je fais mal?
La solution
Les aides sont principalement utilisés pour les tâches complexes liées aux sorties, telles que la création d'un tableau HTML pour le calendrier à partir d'une liste de dates. Tout ce qui concerne les règles de gestion, telles que l'analyse d'un fichier, doit figurer dans le modèle associé, un exemple possible ci-dessous:
class Admin < ActiveRecord::Base
def self.parse_role_data(roledata)
...
end
end
#Call in your controller like this
Admin.parse_role_data(roledata)
Cherchez également à utiliser (routes RESTful ou l'option: conditions) [ http: //api.rubyonrails.org/classes/ActionController/Routing.html] lors de la création de routes, au lieu de rechercher request.post?
dans votre contrôleur.
Autres conseils
Ne devriez-vous pas accéder à la parse_role_data via AdminHelper?
Mise à jour 1: cochez cette case. http://www.johnyerhot.com / 2008/01/10 / rails-using-helpers-in-you-controller /
De l'apparence de si vous essayez de créer une interface utilisateur pour ajouter des rôles aux utilisateurs. Je vais supposer que vous avez déjà un UsersController, je vous suggère donc d'ajouter un modèle de rôle et un RolesController. Dans votre fichier routes.rb, vous feriez quelque chose comme:
map.resources :users do |u|
u.resources :roles
end
Cela vous permettra d'avoir un itinéraire tel que:
/users/3/roles
Dans votre RolesController, vous feriez quelque chose comme:
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
Ceci utilisera les données de paramètres de rôle du formulaire affiché dans la nouvelle action et créera un nouveau modèle de rôle pour cet utilisateur. J'espère que c'est un bon point de départ pour vous.