So validieren Sie in einem Modell Daten von einem Controller

Ich habe also einige Daten, die von einer anderen Rails-App in einem Controller abgerufen werden. Nennen wir sie ExampleController. Ich möchte sie als in meinem Modell vorhanden validieren, bevor der Assistent zum nächsten Schritt übergeht, und ich kann nicht genau herausfinden, wie Ich sollte es tun (Ich weiß, dass das direkte Einspielen dieser Daten vom Controller in das Modell gegen MVC verstößt. Ich bin auf der Suche nach der besten Lösung, um meine Daten vom Controller abzurufen). Die Daten müssen vom Controller stammen, da die Methoden zum Abrufen im ApplicationController enthalten sind. Ich könnte dies jedoch im Awizard-Controller tun, wenn dies einfacher ist. (Auch ich kann keinen Edelstein benutzen)

Bitte geben Sie eine Art Vorschlag für das Problem und keine Erklärung, warum dies nicht der richtige Weg ist, Dinge zu tun, die ich bereits erkenne, aber nicht anders tun kann.

Der Beispiel-Controller

Sollte dies stattdessen die Daten rendern und dann sicherstellen, dass sie an anderer Stelle nicht leer sind?

class ExampleController < ApplicationController

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

end

Mein Modell - (models / awizard.rb)

Wie verwende ich die valid_data? Methode aus dem Beispiel-Controller? in meiner Validierung hier.

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

Oder muss ich dies zu dieser Ansicht hinzufügen?

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

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage