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>