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>