我有一个名为Product
的模型,它有以下几列:
create_table :products do |t|
t.decimal :price
t.string :name
t.integer :offline_store_id
t.integer :online_store_id
t.date :product_date
end
现在我为你在那里看到的关联制作了两种不同的形式:
# using find_or_create_by
webstore = online_store_id
store = offline_store_id
<%= form_for @product do |f| %>
<%= f.text_field :price %>
<%= f.text_field :name %>
<%= f.date_select :product_date
<%= f.text_field :webstore %>
<% end %>
另一种形式是相同的,只是将:webstore
改为:store
。这样做的原因是为在线产品制作表格,为离线制作另一个表格。我担心的是,即使在任何一种形式上都没有这个领域仍然可以填补或不填写。产品不会同时属于在线和离线商店。
这是一件好事吗?即使我没有可用的字段,该字段真的消失了还是黑客仍然可以填写它?
答案 0 :(得分:3)
您对域和UI的建模方式与黑客/安全相关的问题是一个单独的问题。如果需要的话,每个型号有多个表格是完全没问题的。您的安全问题应该与您的域模型单独解决
我建议你看一下你如何建模产品。您的产品应该只知道它的属性并且它属于商店。让Store类包含它的离线/在线状态。
此外,我认为您在此表单上做得太多(看起来您在产品表单上创建了商店)。我建议为商店/产品管理提供单独的表单,并使产品表单上的商店字段成为选择列表。
移植
create_table :products do |t|
t.decimal :price
t.string :name
t.integer :store_id
t.date :product_date
end
create_table :stores do |t|
t.boolean :online
.....
模型
class Product < ActiveRecord::Base
belongs_to :store
class Store < ActiveRecord::Base
has_many :products
具有相同的形式,但使用此元素:
online_status = true # switch this depending on online status
collection_select(:product, :store_id, Store.find_all_by_online(online_status), :id, :name, :prompt => 'Please select store')