2009-12-14 85 views
0

我不介意,我fricked了我的屬性名稱:(我可以將基於動態屬性的發現者的範圍範圍?

這是完全可能的,使用我用確切的語法 - 你只需要能夠拼出


!我似乎無法得到這個工作,並且這似乎是一個普遍的足夠的情況,必須有一個解決方案,但我沒有運用正確的術語來獲得有用的Google結果

I想要做到這一點:

u = User.first 
u.clients.find_or_create_by_email('[email protected]') 

使用user_id = u.id創建新的Client

我可以通過has_many關係獲得漂亮的動態發現者嗎?如果不是,爲什麼?

感謝:)

回答

0

這是完全可能的,用我用確切的語法 - 你只需要能夠拼!

0

此,如果你有關係的has_many一套

u = User.first 
u.clients.find_or_create_by_email('[email protected]') 

作品。但是,如果您在客戶端對象上設置了任何驗證,那麼它將不會引發驗證錯誤,如果驗證失敗,它將自動失敗。

您可以檢查輸出,當你做

u.clients.find_or_create_by_email('[email protected]') # => #<Client id: nil, email: '[email protected]', name: nil, user_id: 1, another_attribute: nil, active: true, created_at: nil, updated_at: nil> 

和USER_ID將被設置,但沒有客戶端的ID,因爲驗證失敗和客戶端沒有創建

所以您的控制檯這應該只在您傳遞客戶端對象的所有必需屬性並且客戶端對象的驗證已成功傳遞時才創建客戶端。

因此,可以說你的客戶端模型對姓名驗證以及除了電子郵件,那麼你應該做的

u.clients.find_or_create_by_email_and_name('[email protected]', 'my_name') #=> #<Client id: 1, email: '[email protected]', name: 'my_name', user_id: 1, another_attribute: nil, active: true, created_at: "2009-12-14 11:08:23", updated_at: "2009-12-14 11:08:23">