我是ROR的新手
我正在建立一个分类广告应用程序,我的数据库中有以下表格:
(为简单起见,某些字段已被删除)
此表存储所有用户。
USER_ID
命名
电子邮件
密码
此表存储了所有广告。
ad_id
users_user_id(FK)
标题
说明
cat_id(FK)
created_at
示例数据:
------------------------------------------------------------------------------
| ad_id | users_user_id | title | desc | cat_id | created_at |
------------------------------------------------------------------------------
| 1 | 1 | iphone 4 | brand new | 2 | 30-11-2015 |
------------------------------------------------------------------------------
此表存储所有可用类别。广告表中的cat_id与此表中的cat_id相关。
CAT_ID信息
类别
parent_cid
示例数据:
-------------------------------------------
|cat_id| category | parent_cid |
-------------------------------------------
|1 | Electronics | NULL |
|2 | Mobile Phone | 1 |
|3 | Apartments | NULL |
|4 | Apartments - Sale | 3 |
-------------------------------------------
此表包含特定类别的所有可用属性。与类别表有关。
attr_id
cat_id(FK)
attr_label
attr_name
示例数据:
-----------------------------------------------------------
|attr_id | cat_id | attr_label | attr_name |
-----------------------------------------------------------
|1 | 2 | Operating System | Operating_System |
|2 | 2 | Is Touch Screen | Touch_Screen |
|3 | 2 | Manufacturer | Manufacturer |
|4 | 3 | Bedrooms | Bedrooms |
|5 | 3 | Total Area | Area |
|6 | 3 | Posted By | Posted_By |
-----------------------------------------------------------
此表存储广告表中每个广告的属性值。
attr_val_id
attr_id(FK)
ad_id
attr_val
示例数据:
---------------------------------------------
|attr_val_id | attr_id | ad_id | attr_val |
---------------------------------------------
|1 | 1 | 1 | Ios 8 |
|2 | 2 | 1 | 1 |
|3 | 3 | 1 | Apple |
---------------------------------------------
在将数据存储到ads_attr_value表之前验证数据的最佳方式(rails方式)是什么,因为这些值将位于选择字段中,并且用户可以轻松地将其更改为例如从Ios 8更改为"布拉布拉&#34 ;.
我想过将每个属性的所有可能值存储在新表中,然后检查用户发送的值是否存在于该表中,然后再将其存储在ads_attr_value中。你怎么看?我相信有更好的方法。
感谢分享。
答案 0 :(得分:0)
rails方式可能会定义您与ActiveRecord关联的关系:http://guides.rubyonrails.org/association_basics.html。
因此,您可以轻松地在模型上定义
class AdsAttrVal < ActiveRecord::Base
belongs_to :ad
validates :ad, presence: true
end
但是请记住,存储表格ID的rails方式是将其命名为&#34; id&#34;而不是&#34; 模型 _id&#34;就像你做的那样(&#34; user_id&#34;,&#34; id&#34;)。我的例子假设铁路方式受到尊重......
答案 1 :(得分:0)
您必须在<yourModel>.rb
(模型文件)中指定所需的验证。如果要验证ad_id
是否为数字,请在validates
语句中添加数字参数,请参见下文:
class AdsAttrValue < ActiveRecord::Base
validates :ad_id, numericality: true
#validate if add_att_value has the permitted values
validate :myCustomValidation
def myCustomValidation
#your logic of validation goes here
#you can access here all the fields from this object recently created
if attr_val == something
#do something
end
end
end
请参阅rails中的验证最后有s
(validates
),并且您自己的书面验证没有(validate
)。
在存储到数据库之前创建对象时执行此验证,以查看它是否符合验证并且不存储它不符合。您可以在自己的验证中添加错误,以便让用户知道出了什么问题。进一步了解this reading of validations in ruby on rails