gpt4 book ai didi

ruby-on-rails - Rails 验证虚拟属性

转载 作者:行者123 更新时间:2023-12-04 06:59:45 25 4
gpt4 key购买 nike

我的模型看起来像这样:

class Item < ActiveRecord::Base
has_many :locations
validate :validate_item_location

def item_location
locations.address+','+locations.city+','+locations.country
end

def item_location=(str)
geo = Geokit::Geocoders::MultiGeocoder.geocode(str)
if geo.success
locations.build( :lat => geo.lat, :lng => geo.lng)
end
end

def validate_item_location
geo = Geokit::Geocoders::MultiGeocoder.geocode( item_location )
errors.add_to_base("Location is invalid") unless geo.success
end
end

我的问题
1. 如何正确编写定义的getter方法item_location?
2. 如何验证 item_location 字段。我创建了 validate_item_location 方法,但是当我通过表单发布数据时不知道如何在里面获取 item_location 变量。
3.我的setter方法可以吗?

谢谢!

最佳答案

1) 一个物品可以有多个位置?似乎(对我来说)它应该只有一个,所以更改 hasy_manyhas_one .除非你真的想拥有多个位置,否则你需要更改 item_location从您拥有的列表中选择一个位置。

2 & 3) 如果您通过表单发布数据,则 item_location 由 item_location= 设置方法。哪个应该(以某种方式)存储项目信息。在您的情况下,它存储从 geo 返回的坐标。多变的。你应该引发一些错误,当 geo.success为 false 以通知用户该值未存储。如果你特别想验证发送到 setter 的值,那么你需要将它存储在类中:@saved_location = str并使用 @saved_location来验证,而不是 item_location。

1 & 3) 通常情况下,setter 和 getter 使用相同的数据(结构)。在您的情况下,您将位置的坐标存储在您的 setter 中,但返回地址、城市和国家/地区。因此,setter 和 getter 似乎不兼容。

希望这些言论有帮助!

关于ruby-on-rails - Rails 验证虚拟属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2063704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com