Cómo validar en un modelo, datos de un controlador.

Así que tengo algunos datos que se extraen de otra aplicación de rieles en un controlador. Llamémoslo a ExampleController y quiero validarlo como si estuviera en mi modelo antes de permitir que el asistente avance a su siguiente paso y no puedo entender cómo Debería estar haciéndolo (Sé que obtener estos datos directamente del controlador en el modelo viola MVC. Estoy buscando la mejor solución para obtener mis datos del controlador.). Los datos deben provenir del controlador, ya que los métodos para obtenerlos están contenidos en ApplicationController. Sin embargo, podría hacer esto en el controlador Awizard si es más fácil. (Tampoco puedo usar una gema)

Por favor, ofrezca algún tipo de sugerencia al problema y no una explicación de por qué esta no es la forma correcta de hacer las cosas. Ya me doy cuenta de eso, pero no puedo hacerlo de otra manera.

El controlador de ejemplo

¿debería esto, en cambio, mostrar los datos y luego verificar que no esté en blanco en otra parte?

class ExampleController < ApplicationController

  def valid_data?            
    data = #data could be nil or not
    if data.blank?
      return false
    else
      return true
  end

end

Mi modelo - (models / awizard.rb)

¿Cómo uso el valid_data? ¿Método del controlador de ejemplo? En mi validación aquí.

class AWizard
include ActiveModel::Validations
include ActiveModel::Conversion
include ActiveModel::Dirty
include ActiveModel::Naming

#This class is used to manage the wizard steps using ActiveModel (not ActiveRecord)

attr_accessor :id
attr_writer :current_step  #used to write to current step
define_attribute_methods [:current_step] #used for marking change

validate :first_step_data, :if => lambda { |o| o.current_step == "step1" };

def first_step_data
  #What should i put here to check the valid_data? from the examplecontroller
end

def initialize(attributes = {})
   attributes.each do |name, value|
     send("#{name}=", value)
   end
end

def current_step
  @current_step || steps.first
end

def steps
  %w[step1 step2 step3] #make list of steps (partials)
end

def next_step
  current_step_will_change! #mark changed when moving stepped
  self.current_step = steps[steps.index(current_step)+1] unless last_step?
end

def previous_step
  current_step_will_change! #mark changed when moving stepped
  self.current_step = steps[steps.index(current_step)-1] unless first_step?
end

def first_step?
  current_step == steps.first
end

def last_step?
  current_step == steps.last
end

def all_valid?
  steps.all? do |step|
    self.current_step = step
    valid?
  end
end

def step(val)
  current_step_will_change!
  self.current_step = steps[val]
end

def persisted?
  self.id == 1
end

end

¿O necesito agregar esto a esta vista?

(/views/awizard/_step1.html.erb)

<div class="field">
  <%= f.label 'Step1' %><br />
  #This is the step I want to validate
</div>

Respuestas a la pregunta(4)

Su respuesta a la pregunta