문제

나를 신경 쓰지 마세요, 나는 내 속성 이름을 틀었습니다 :(

이것은 내가 사용한 정확한 구문을 사용하여 전적으로 가능합니다. 철자를 할 수 있어야합니다!


나는 이것을 작동시킬 수 없으며, 해결책이 있어야하는 충분한 시나리오처럼 보이지만, 유용한 Google 결과를 얻기 위해 올바른 용어로 운이 좋지 않습니다.

나는 이것을하고 싶다 :

u = User.first
u.clients.find_or_create_by_email('example@example.com')

새로운 효과와 함께 Client 함께 만들어졌습니다 user_id = u.id.

a를 통해 멋진 다이내믹 파인더를 얻을 수 있습니까? has_many 관계? 그렇지 않다면 왜?

감사 :)

도움이 되었습니까?

해결책 2

이것은 내가 사용한 정확한 구문을 사용하여 전적으로 가능합니다. 철자를 할 수 있어야합니다!

다른 팁

이것

u = User.first
u.clients.find_or_create_by_email('example@example.com')

Has_many 관계 설정이있는 경우 작동합니다. 그러나 클라이언트 오브젝트에 유효성 검사가 설정되어 있으면 유효성 검사 오류가 발생하지 않으며 유효성 검사에 실패하면 조용히 실패합니다.

할 때 콘솔의 출력을 확인할 수 있습니다.

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">
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top