Rails验证在属性表中

时间:2015-11-30 16:52:00

标签: ruby-on-rails

我是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          |
-------------------------------------------

表ads_attribute

此表包含特定类别的所有可用属性。与类别表有关。

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          |
-----------------------------------------------------------

表ads_attr_value

此表存储广告表中每个广告的属性值。

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中。你怎么看?我相信有更好的方法。
感谢分享。

2 个答案:

答案 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中的验证最后有svalidates),并且您自己的书面验证没有(validate)。 在存储到数据库之前创建对象时执行此验证,以查看它是否符合验证并且不存储它不符合。您可以在自己的验证中添加错误,以便让用户知道出了什么问题。进一步了解this reading of validations in ruby on rails