#ruby-on-rails
#ruby-on-rails
Вопрос:
Код выглядит следующим образом
def update
# params = {"from_zip"=>"28803", "lane_week_day_names"=>["Wednesday", "Monday"]}
@lane.assign_attributes(params)
return unless @lane.valid?
# rest of logic
end
Модель определяется следующим образом
validate :duplicate_lane
has_many :lane_week_days
def lane_week_day_names
lane_week_days.map(amp;:day)
end
def lane_week_day_names=(daynames)
Date::DAYNAMES.each do |dayname|
existing = lane_week_days.find { |week_day| week_day.day == dayname }
if daynames.include?(dayname)
lane_week_days.build(day: dayname) if existing.blank?
else
existingamp;.mark_for_destruction
end
end
end
Проверка модели определяется следующим образом
def duplicate_lane
#need to get lane_week_day_names form the params
#compare lane_week_day_names from the params with existing records
errors.add(:base, "Invalid")
end
Мне нужно получить доступ к lane_week_day_names, который доступен в параметрах, для доступа внутри модели. Есть идеи о том, как этого добиться?
Ответ №1:
вы можете использовать это, но вам нужно изменить имена параметров на другое имя, потому что у вас есть метод с тем же именем.
# app/models/lane.rb
attr_accessor :another_params_name
def duplicate_lane
self.another_params_name # you'll get the value here.
end
Спасибо 🙂