私はスコープのオブジェクトへの動的な属性ベースのファインダーをできますか?
-
19-09-2019 - |
質問
の私を気にしないでください、私は私の属性名をfricked:(の
これは私が使用される正確な構文を使用して、完全に可能です! - あなただけのスペルができるようにする必要があります。
<時間>私はこの仕事を得るように見えることはできません、それは解決策がなければならないという共通の十分なシナリオのように思えるが、私が参考にGoogleの結果を得るために正しい用語を持つ任意の運を持っていませんよ。
私はこれをしたい:
u = User.first
u.clients.find_or_create_by_email('example@example.com')
新しいClient
がuser_id = u.id
で作成された効果でます。
私はhas_many
の関係を通じて素敵なダイナミックファインダを得ることができますか?ない場合、その理由は?
ありがとう:)
解決 2
これは私が使用される正確な構文を使用して、完全に可能です! - あなただけのスペルができるようにする必要があります。
他のヒント
この
u = User.first
u.clients.find_or_create_by_email('example@example.com')
あなたはhas_manyの関係が設定されている場合は、は動作します。あなたのClientオブジェクトに設定された任意の検証を持っている場合しかし、それは検証エラーは発生しませんし、検証が失敗した場合、それは静かに失敗します。
あなたは、コンソールに出力を確認することができますあなたが行うとき、
u.clients.find_or_create_by_email('example@example.com') # => #<Client id: nil, email: 'example@example.com', 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('example@example.com', 'my_name') #=> #<Client id: 1, email: 'example@example.com', 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">
所属していません StackOverflow