2011-11-21 93 views
0

我有模式叫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。原因是爲在線產品製作一個表格,另一個用於離線。我擔心的是,如果該字段仍然可以填寫或不填寫,即使其中沒​​有任何一種可用。產品不能同時屬於在線和離線商店。

這是一件好事嗎?即使我沒有可用的字段,該字段是否真的消失了,或者黑客仍然可以填寫它?

回答

3

您如何建模您的域和用戶界面是與黑客/安全相關的問題單獨關注的問題。如果需要的話,每個模型都有多個表單是完全正確的。你是安全問題應該從你的域名模型分開處理

我會建議看看你如何建模產品。你的產品應該只知道它的屬性,並且它屬於一個商店。讓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') 
+0

謝謝,太感激的額外信息。我會嘗試使用它。 – LearningRoR