Pergunta

No meu aplicativo Ruby on Rails, tenho:

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

  end
end

e também

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

No entanto, recebo um erro dizendo parse_role_data não está definido.O que estou fazendo de errado?

Foi útil?

Solução

Os auxiliares são usados ​​principalmente para tarefas complexas relacionadas a resultados, como criar uma tabela HTML para um calendário a partir de uma lista de datas.Qualquer coisa relacionada às regras de negócios, como a análise de um arquivo, deve ir no modelo associado, um possível exemplo abaixo:

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

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

Também considere usar (rotas RESTful ou a opção :conditions)[http://api.rubyonrails.org/classes/ActionController/Routing.html] ao fazer rotas, em vez de verificar request.post? em seu controlador.

Outras dicas

Você não deveria estar acessando o parse_role_data através do adminHelper?

Atualização 1: Verifique isso http://www.johnyerhot.com/2008/01/10/rails-using-helpers-in-you-centroller/

Pela aparência de se você está tentando criar uma interface do usuário para adicionar funções aos usuários. Vou assumir que você já possui um controlador de usuários, por isso sugiro adicionar um modelo e um riscontrolador. Em suas rotas.rb você faria algo como:

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

Isso permitirá que você tenha uma rota como:

/users/3/roles

No seu Rolescontroller, você faria 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

Isso receberá os dados dos parâmetros da função do formulário exibido na nova ação e criará um novo modelo para esse usuário. Espero que este seja um bom ponto de partida para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top