بارامز النظام في فو.جديد (بارامز [: فو]) ، تحتاج واحدة قبل الأخرى (القضبان)
-
23-09-2019 - |
سؤال
لدي مشكلة لا أعرف كيفية إصلاحها.عليها أن تفعل مع تجزئة المعلمات التي لم يتم فرزها.
لدي حجز كائن يحتوي على وقت افتراضي= سمة وجلسة أكل افتراضية= سمة عندما أقوم بتعيين الوقت= أريد أيضا التحقق من صحتها عبر طلب خادم خارجي.أفعل ذلك مع مساعدة من مرات الأسلوب () مما يجعل البحث على خادم آخر ويحفظ جميع الأوقات الممكنة في متغير @تايمز.
تكمن المشكلة الآن في أن أوقات الطريقة() تحتاج إلى سمة جلسة الأكل لمعرفة الأوقات الصالحة ، لكن ريلز تستدعي أحيانا طريقة الأوقات= أولا ، قبل أن يكون هناك أي جلسة أكل في كائن الحجز عندما أقوم فقط بالحجز @ = الحجز.جديد (بارامس [: حجز])
class ReservationsController < ApplicationController
def new
@reservation = Reservation.new(params[:reservation])
# ...
end
end
class Reservation < ActiveRecord::Base
include SoapClient
attr_accessor :date, :time
belongs_to :eating_session
def time=(time)
@time = times.find { |t| t[:time] == time }
end
def times
return @times if defined? @times
@times = []
response = call_soap :search_availability {
# eating_session is sometimes nil
:session_id => eating_session.code, # <- HERE IS THE PROBLEM
:dining_date => date
}
response[:result].each do |result|
@times << {
:time => "#{DateTime.parse(result[:time]).strftime("%H:%M")}",
:correlation_data => result[:correlation_data]
}
end
@times
end
end
ليس لدي أي فكرة عن كيفية إصلاح هذا ، أي مساعدة هي أبريكاتيد.
المحلول
ما أفعله غالبا في هذه الحالة هو دفع الكود التابع إلى التحقق من الصحة:
class ReservationsController < ApplicationController
def new
@reservation = Reservation.new(params[:reservation])
# ...
end
end
class Reservation < ActiveRecord::Base
include SoapClient
attr_accessor :date, :time
belongs_to :eating_session
validate :validate_time
def validate_time
errors.add_to_base "Time is invalid" unless @time = times.find { |t| t[:time] == time }
end
def times
return @times if defined? @times
@times = []
response = call_soap :search_availability {
# eating_session is sometimes nil
:session_id => eating_session.code, # <- HERE IS THE PROBLEM
:dining_date => date
}
response[:result].each do |result|
@times << {
:time => "#{DateTime.parse(result[:time]).strftime("%H:%M")}",
:correlation_data => result[:correlation_data]
}
end
@times
end
end
لا تنتمي إلى StackOverflow