2015-09-25 17 views
0

我想通過表單獲取某些用戶數據,然後使用User.rb方法分析一些數據。如果數據返回true,我想創建一個新的Hipster記錄。Rails:創建新的用戶記錄,分析數據,然後只在數據返回true時創建新的Hipster

我只有想保存時髦記錄,而不是用戶記錄。通用用戶記錄對我來說毫無用處。

最簡單的方法是在保存之前創建一個Hipster模型並創建一堆自定義驗證。這裏是我當前的代碼:

Hipster.rb

validate :hipster_status, :on => :create 

def hipster_status 
    has_a_bike? 
    has_a_moustache? 
    has_skinny_jeans? 

    unless hipster? 
    self.errors.add("aint a hipster") 
    end 

end 

def has_a_bike? 
# run some code to see if User has a bike 
end 

def has_a_moustache? 
# run some code to see if User has a moustache 
end 

def has_skinny_jeans? 
# run some code to see if User has skinny jeans 
end 

def hipster? 
has_a_bike? && has_a_moustache? && has_skinny_jeans? 
end 

但感覺錯誤必須在行家模型這些方法。調用hipster.hipster?感覺很奇怪我覺得我應該創建一個臨時用戶,如果它返回true,則調用user.hipster?,然後創建一個Hipster(甚至不保存用戶)。

但我很難想象新的架構。當用戶訪問用戶#新頁面時,他們將表單發佈到用戶#創建?但我不想創建一個用戶。是否可以發佈到用戶#創建而不打算創建記錄?

或者我只是超越它,應該堅持到第一個版本?

+1

時髦是一個具有某些屬性的用戶,所以我並不真正相信你需要Hipster類。我不知道你的模型有什麼用例,但是一種選擇是創建一個'Accessory'模型來將不同的用戶配件存儲在has_many關聯中。像自行車,小鬍子,skinny_jeans這樣的東西都可以作爲配件存儲,並且可以隨時添加新的配件,因此可以很好地擴展。你可以創建一個用戶並添加/檢查這些附件,以確定是否有user.is_hipster?或user.is_geek?或user.is_android_fanboy?等 – Rog

回答

0

我同意羅格的評論。如果您要讓用戶擁有大量附件或其他附加屬性,請製作相關模型。

如果自行車,小鬍子,和緊身牛仔褲是你唯一感興趣的事情,而你使用的是支持像Postgres的數組序列數據庫,你可以做一些簡單的像像一個小:

class User < ActiveRecord::Base 
    # add a text column to the users table named accessories 
    serialize :accessories, Array 

    def has_accessory(accessory_name) 
    accessories.include? accessory_name 
    end 

    def is_hipster? 
    has_accessory('bike') && has_accessory('mustache') && has_accessory('skinny jeans') 
    end 
end 
+0

我想這只是因爲我贏了'沒有任何用戶不是數據庫中的時尚人士。我所有保存的用戶都是時尚人士 –

相關問題