2014-04-27 2 views
1

테이블의 이름이 계획하고 사용자가 새로운 데이터를 만들 수 또는 삭제 된 데이터를 존재하지 않기 때문에 그것은, 한 행있다 (단 1 행이 그래서 난 단지 특정 결과가 아니라 배열을 원하는있다). 편집 만 할 수 있습니다. 테이블에 대한레일에서 테이블에서 특정 열의 데이터를 선택하는 방법은 무엇입니까?

는 구조는 다음과 같다 : 아침 식사, 점심 식사, 저녁 : 그것을 의미

<Plan id: 1, breakfast: 100, lunch: 240, dinner: 200, ... 

세 가지 열이 있습니다. 컨트롤러 파일에서

, 나는, 예를 들어, 아침 식사를 하나 개의 특정 컬럼의 데이터 사용자 입력에 액세스하려는. 어떻게해야합니까? 나는 레일 아주 새로운 오전과 유사한 것이라고 가정하기 때문에 :

Plan.select("breakfast") 

그러나, 나는 배열로 결과를 싶지 않아! 숫자에 내 코드에서 직접 사용할 수 있도록 숫자 만 입력하면됩니다.

if xxxx > 90 
... 
end 

대단히 고마워요! 하나 개의 행이있을 보장되기 때문에

+0

테이블이 데이터 이제까지 변경합니까? 그렇지 않으면 DB에 단일 요소 만있는 것이 보장되므로 모델을 데이터베이스에 연결하지 않는 것이 좋습니다. 모델을 정의하고 원하는 다양한 데이터를 반환하는 도우미 메서드가 있어야합니다. –

+0

네, 데이터가 사용자에 의해 자주 변경 될 것이므로 귀하의 제안은 제게는 매우 유용하며 레일을 공부하는 동안 계속 주시 할 것입니다. :) 대단히 감사합니다. – user2049259

답변

3

, 당신은 .first or .last를 통해 직접 잡아 수 있습니다. 당신이 선택한 열 .select() 방법으로 원하는 breakfast을 제한 할 수 있지만, 아마 필요하지 않으며 당신은 결과 개체에서 breakfast를 검색 할 수 있습니다 다음을 유발하는 .select()를 사용

Plan.last.breakfast 
=> 100 
# Generates this query: 
Plan Load (0.4ms) SELECT "plans".* FROM "plans" ORDER BY "plans"."id" DESC LIMIT 1 

을 검색하는 SQL 쿼리는breakfast 열이 가능하지만 아주 작은 메모리 증가 이외의 많은 이점을 제공하지는 않습니다. 물론

Plan.select(:breakfast).last.breakfast 
=> 100 
# Generates this query: 
Plan Load (0.4ms) SELECT breakfast FROM "plans" ORDER BY "plans"."id" DESC LIMIT 1 

, 당신은 그것을 변수에 저장하거나 바로 표현식에서 사용할 수 있습니다

if Plan.last.breakfast > 90 
    # whatever 
end 
+0

완벽하게 해결해 주셔서 대단히 감사합니다! – user2049259

+0

@ user2049259 도와 드리겠습니다. –

관련 문제