2016-07-28 1 views
0

이것은 숙제 문제가 아닙니다. 나는 더 많은 것을 배우려고 노력하고있다.Ruby on Rails를 사용하여 A와 B 순으로 정렬 모델

나는 속성
Manufacturer {name} // 스토어 Manufactueres
Model {manufacturer_id, name} // 스토어 모델
Tint {manufacturer_id, model_id, front, side, rear} // 스토어 측정

Tint 기업에 대한 추적 데이터가 다음과 같은 요소를 가지고있다. 알파벳은 제조업체 이름과 모델이 다릅니다.

Manufacturer | Model | Front | Side | Rear | 
-------------+-------+-------+------+------- 
A   | AD | 10 | 10 | 10 | 
B   | AB | 10 | 10 | 10 | 
A   | AA | 10 | 10 | 10 | 
A   | AC | 10 | 10 | 10 | 
B   | AA | 10 | 10 | 10 | 
A   | AB | 10 | 10 | 10 | 

내가 view에 그것을 밖으로 인쇄 할 때, 나는 그것이 ModelManufacturer 이름을 기준으로 다음 소트하고 싶습니다. 결과는 아래와 같습니다. 제조사의 이름은 사전 순으로 정렬 된 다음 모델 순으로 정렬됩니다.

Manufacturer | Model | Front | Side | Rear | 
-------------+-------+-------+------+------- 
A   | AA | 10 | 10 | 10 | 
A   | AB | 10 | 10 | 10 | 
A   | AC | 10 | 10 | 10 | 
A   | AD | 10 | 10 | 10 | 
B   | AA | 10 | 10 | 10 | 
B   | AB | 10 | 10 | 10 | 

나는 설정을 ManufacturerModel 값의 고유 한 쌍 있는지 확인하기 위해 모델을 가지고있다. 내가 ManufacturerModel 테이블에서 ManufacturerModel의 이름을 얻을 수있는 방법, manufacturer_idmodel_id를 사용하여 참조하고 있기 때문에

내 질문입니다.

내 tints_controller.rb에 @tints = Tint.all.order(:manufacturer_id)이 있습니다. 그러나 제조업체 이름 대신 manufacturer_id (숫자와 같은)만을 기준으로 정렬됩니다.

RoR 모델에서 SQL 방법 (SELECT, FROM, WHERE)으로 처리 할 수 ​​있음을 알고 있습니다. 그러나 ActiveRecord를 사용하여 이름을 기준으로 데이터를 정렬 할 수 있는지 알고 싶습니다.

답변

0

대답 내 질문에 :

tints_controller.rb, 나는 테이블에 가입 @tints = Tint.joins(:manufacturer, :model).order("manufacturers.name ASC, models.name ASC")을 쓴 그에 따라 주문하십시오.

위의 @Goston에서 제공 한 답변을 시도한 결과 tints을 편집하려고 할 때 문제가 발생했습니다. 그것은 내가 편집하는 것을 허락하지 않았다.

참고 : @Goston에서 제공하는 응답으로 주문되지만 내 경우에는 edit 함수가 부러졌습니다.

0

때마다 당신이 레일에서 엔티티의 id, 당신은 쉽게 단순히 개체를 인스턴스화하여 기타 관련 분야를 검색 할 수 있습니다

@manufacturer = Manufacturer.find(params[manufacturer_id]) 

는 그 다음 다른 모든 필드를 검색 할 수있는 간단한 문제입니다 :

@manufacturer_name = @manufacturer.name 

당신은 제조업 자 또는 제조업체 이름의 컬렉션을해야하는 경우 (이미 알고있는), 다음은 범위 질의를 통해 즉시 자신에게 ActiveRecord::Relation 객체를 구축하는 것이 바람직합니다. 나는 당신의 기준이 무엇인지 모르겠다. 그렇지 않다면 나는 약간의 샘플 코드를 제공 할 것이다. 나는 당신의 범위 쿼리 끝에 .order 조항을 포함해야한다고 말할 수 있습니다 :

위의 예에서
@manufacturers = Manufacturer.where("some_column = ?", some_criterion).order(:sort_field) 

, :sort_field들이 필드 것 당신이 당신의 ActiveRecord::Relation을 정렬 할 의해. 네 사건에서 짐작할 수 있겠지만, 그것은 :name입니다.

멋진 정렬 테이블을 원할 경우, JQuery DataTables 보석을 조사해야합니다. DataTables는 많은 어려움을 줄 수 있으며 사용자가 편리하게 사용할 수 있습니다. 왜냐하면 사용자가 제시 한 열을 기준으로 정렬 및 휴양을 수행 할 수 있기 때문입니다.

+0

나는 당신이 말하고자하는 것을 완전히 얻지 만 다소 길을 잃었습니다. 제조업체의 이름을 얻으려면 @ manufacturer.name을 사용할 수 있음을 알고 있습니다. 나는 Tint 컨트롤러에 있기 때문에'@ tints = Tint.all.order (: manufacturer_id)'를 변경하여 어떻게 다음 코드를 삽입 할 수 있습니까? 나는 지난 1 시간 동안 그것을 알아 내려고 노력했지만, 나는 여전히 길을 잃었다. –

2

제대로 이해하면 색조, 제조업체 및 모델의 3 가지 모델이 있습니다.나는 당신에게 적절한 has_many가 있고 belongs_to가 associations이라고 올바르게 가정합니다.

Tint.rb 
belongs_to :workspace 

Manufacturer.rb 
has_many :models 
has_many :tints, through: :models 

Model.rb: 
belongs_to Manufacturer 
has_many :tints 

는 먼저 함께 세 가지 모델에 가입해야하고 순서를 당신에게 모든 색조 기록을 제공하는 몇 가지 기준
tints_controller.rb 
@tints = Tint.joins(model: :manufacturer).order('manufacturers.name, models.name').pluck('manufacturers.name, models.name, tints.front, tints.side, tints.rear') 

에 의해 그들은 모델과 제조업체를 appropiate.

@tints = Tint.all.order(:manufacturer_id) 

당신의 tints_controller.rb에서

+0

예, 질문을 올바르게 이해했으며 모델에 다음 관계가 있습니다. 그러나 SQL 조인을 사용하지 않으려 고합니다. –

0

, instedad 작성하십시오

@tints = Tint.all.order(:manufacturer_id, :model_id) 
+0

어제 시도해 보았습니다. 모델 및 제조업체 이름 대신 ID 만 정렬하기 때문에 작동하지 않습니다. –

관련 문제