Domanda

Nella mia app Ruby on Rails, ho:

class AdminController < ApplicationController
  def create
    if request.post? and params[:role_data]
      parse_role_data(params[:role_data])
    end

  end
end

e anche

module AdminHelper
  def parse_role_data(roledata)
    ...
  end
end

Tuttavia, viene visualizzato un errore che indica che parse_role_data non è definito. Cosa sto sbagliando?

È stato utile?

Soluzione

Gli helper vengono utilizzati principalmente per attività complesse correlate all'output, come la creazione di una tabella HTML per il calendario da un elenco di date. Tutto ciò che riguarda le regole aziendali come l'analisi di un file dovrebbe andare nel modello associato, un possibile esempio di seguito:

class Admin < ActiveRecord::Base
  def self.parse_role_data(roledata)
    ...
  end
end

#Call in your controller like this
Admin.parse_role_data(roledata)

Cerca anche di utilizzare (RESTful route o l'opzione: condition) [ http: //api.rubyonrails.org/classes/ActionController/Routing.html] durante la creazione di percorsi, anziché controllare request.post? nel controller.

Altri suggerimenti

Non dovresti accedere a parse_role_data tramite AdminHelper?

Aggiornamento 1: controlla questo   http://www.johnyerhot.com / 2008/01/10 / rotaie-utilizzando-aiutanti-in-you-Controller /

Dall'aspetto di se stai cercando di creare un'interfaccia utente per aggiungere ruoli agli utenti. Presumo che tu abbia già un UsersController, quindi suggerirei di aggiungere un modello di ruolo e un RolesController. Nel tuo route.rb faresti qualcosa del tipo:

map.resources :users do |u|
    u.resources :roles
end

Questo ti permetterà di avere un percorso come:

/users/3/roles

Nel tuo RolesController faresti qualcosa del tipo:

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

Ciò prenderà i dati dei parametri di ruolo dal modulo visualizzato nella nuova azione e creerà un nuovo modello di ruolo per questo utente. Spero che questo sia un buon punto di partenza per te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top