2014-12-19 6 views
1

내가 상상해야하는 것은 심오한 간단한 질문이지만 꽤 많은 인터넷 검색 결과를 찾을 수 없었습니다.모델 ID 가져 오기

사용자가 각각 user has_one widget입니다.

mysql> show columns in widgets; 
+------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| name  | varchar(255) | YES |  | NULL |    | 
| user_id | int(11)  | YES | MUL | NULL |    | 
| created_at | datetime  | YES |  | NULL |    | 
| updated_at | datetime  | YES |  | NULL |    | 
+------------+--------------+------+-----+---------+----------------+ 

내가 USER_ID를 사용하여 위젯의 ID를 찾아 내 컨트롤러 @id로 저장하려면 다음과 같이 이제 위젯 테이블이 설정되어 있습니다.

내가 성공하지 않고 다음의 몇 가지 변화를 시도했다 :

@widget=Widget.where(:user_id => current_user) 
@[email protected] 

나는 종류의이 간단한 무언가를 물어 당황하지만 난 정말 똑바로 대답을 찾을 수 없습니다. 미리 감사드립니다.

답변

3

Widget.where(:user_id => current_user.id)은 사용자에 속한 모든 위젯 모음을 반환합니다. DB에는 has_one 연관이 모델에 정의되어 있지 않으므로 DB에 여러 가지 이유로 다른 레코드가 포함될 수 있습니다.

첫 번째 일치하는 레코드는 Widget.where(:user_id => current_user.id).first입니다. 또는 간단히 current_user.widget을 사용하여 연결을 사용할 수 있습니다. 쿼리는 항상 배열을

@widget=Widget.where(:user_id => current_user).first 
@widget.id 
1

당신은 올바른 약간 있지만,이 방법이라고 생각 :

@id = Widget.where(user_id: current_user.id).first.try(:id) 

그래서 사용자가 지정한 user_id에 대한 위젯을 선택해야하고 (있는 경우) 첫 번째 값을 선택하고, id 또는 nil를 반환합니다.

1

당신이 한 현재 사용자의 위젯이 다음 사용할 수있는 경우이 정의한 has_one 관계를 사용합니다

@widget = current_user.widget 

. 다른 사용자에 대해

:

@widget = some_other_user.widget 

당신은 당신이 USER_ID이 돌출 경우 일반 액티브 방법을 사용할 수 있습니다. 아무것도 데이터베이스에서 발견되지 않을 때 두 경우 모두 @widgetnil을 할 수 있기 때문에, 당신이 조심해야하는 모든 경우에

@widget = Widget.where(user_id: some_user_id).first 

:이 경우 당신은 사용자를 가져 쿼리를 저장할 수 있습니다.

2

을 제공 곳에서

+0

왜 'some_other_user.widget'뿐만 아니라 다른 사용자에 대해 다른 방식으로 쿼리합니까? – Surya

+0

사실! 내가 뭘 생각하고 있었는지 모르겠다. 아마 다른 쿼리 방법을 보여주고 싶었을 것이다.updated – Fer

1

직접이 같은 위젯 ID를 찾기 위해 사용자와 위젯 간의 연결을 사용할 수 있습니다

current_user.widget.try(:id) 

시도가 전무 값에 필요한 다음 current_user.widget가 반환됩니다 현재 사용자가 어떤 위젯이없는 경우 무.

+0

나는 방금 나쁜 일을했다. 내가 모두 upvoted =) –