2009-12-14 3 views
0

Не против меня, я fricked мои имена атрибутов :(Могу ли я обладать динамическими искателями на основе атрибутов для объекта?

Это вполне возможно, используя точный синтаксис я использовал - вам просто нужно, чтобы иметь возможность по буквам


! Кажется, я не могу заставить это работать, и, похоже, достаточно распространенный сценарий, что должно быть решение, но мне не повезло с правильной терминологией, чтобы получить полезный результат Google.

I хочу сделать это:

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

Сразу получилось, что новый Client был создан с user_id = u.id.

Могу ли я получить красивые динамические искатели через отношения has_many? Если нет, то почему?

Благодаря :)

ответ

0

Это вполне возможно, используя точный синтаксис я использовал - вам просто нужно, чтобы иметь возможность по буквам !

0

Это

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

работает, если у вас есть has_many набор отношений. Тем не менее, это не приведет к повышению ошибки проверки, если у вас есть какие-либо проверки, установленные на вашем объекте Client, и он будет терпеть неудачу, если проверка не удалась.

Вы можете проверить вывод в консоли, когда вы делаете

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 будет установлен, но не идентификатор клиента, поскольку проверка не удалась, и клиент не создал

Так это должно создать клиента только в том случае, если вы передадите все необходимые атрибуты клиентского объекта, и проверка для объекта клиента прошла успешно.

Так позволяет сказать, что ваша модель клиент имеет проверку по имени, а кроме электронной почты, то вы должны сделать

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">