2012-11-28 31 views
1

我的問題是:Rails的,動態的用戶定義的字段

我有兩個型號:產品&品牌。 目前在產品表格中,用戶可以爲他的產品選取品牌(通過選擇列表)。但是如果品牌不存在,他可以通過點擊重定向到品牌/新表單的鏈接來創建一個新品牌。

有沒有辦法直接在產品的表現公式處理丟失的品牌創造?

我希望我很清楚。

謝謝您的回答。

回答

1

在表格本身中,您可以允許用戶從下拉列表中選擇品牌在文本字段中鍵入新品牌的名稱。我會使用無線電強制用戶執行這兩個操作中的一個,而不是兩個。 <option>元素將具有與品牌名稱對應的值,而不是品牌ID。

然後,在鐵軌上的一面,你可以使用find_or_create_by_name,假設你的品牌名是唯一的:

# assuming a params structure like params[:product][:brand_name] 
class Product < ActiveRecord::Base 
    def brand_name=(name) 
    self.brand = Brand.find_or_create_by_name(name) 
    end 
end 

控制器仍然簡單地做這樣的事情:

@product = Product.new(params[:product]) 
+0

謝謝,這真的很有趣。如果品牌模型包含必需的描述字段呢? – m0g

+0

這變得更加複雜。您可以使用'find_or_create_by_name_and_description'並設置一些隱藏字段,其中包含品牌描述(這是一種黑客攻擊),或者您可以提供一個模式對話框,允許用戶直接從產品頁面創建品牌,並在保存時重新加載下拉菜單通過Ajax。這是一個更復雜的用戶體驗問題。您還可以放寬品牌描述的要求,只允許品牌臨時存在而不用描述。用戶只需稍後創建說明即可。 – Brandan

+0

增加我的兩分錢,你可以使用'find_or_create_by_name(name:name,description:「一些默認的描述)''''。它將僅按名稱執行查找,如果沒有找到,則使用散列創建記錄。 –

0

我個人使用jQuery來做這樣的事情。讓用戶從選擇列表中選擇「New Brand」,然後顯示輸入提示。使用AJAX創建新品牌,然後在選擇新品牌的情況下重新創建品牌列表。

相關問題