将模型设为两种不同形式是安全的吗?

时间:2011-11-21 09:20:38

标签: ruby-on-rails ruby-on-rails-3

我有一个名为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。这样做的原因是为在线产品制作表格,为离线制作另一个表格。我担心的是,即使在任何一种形式上都没有这个领域仍然可以填补或不填写。产品不会同时属于在线和离线商店。

这是一件好事吗?即使我没有可用的字段,该字段真的消失了还是黑客仍然可以填写它?

1 个答案:

答案 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')