0

확실하지 보석을 세계화하여 나는 경우 상기의 세계화 보석레일 : SQL로 명시된 경우 액티브 레코드 쿼리 조건에만 작동 -이 당신이 알고있는 그 이것에 대한 수정이지만, 경우

class Menu < ActiveRecord::Base 

    translates :name 
    # other stuff ... 

end 

를 사용하는 경우 활성 레코드 쿼리를 표준으로 작성하면 빈 세트가 생성됩니다.

- 일반적으로

Model.where(attribute: "Value") 

이 작동하지 않는,

Model.where('attribute = ?', 'Value') 

이 작업을 수행합니다.

--- 내 메뉴 모델의 콘솔에서 실제 예제 : 왜 이런 일

이 가
2.3.0 (main):0 > Menu.where(name: "Lunch Boxes") 
=> [] 
2.3.0 (main):0 > Menu.where('name = ?', "Lunch Boxes") 
=> [#<Menu:0x007fbab6dc6838 id: 12, restaurant_id: 15, name: "Lunch Boxes", created_at: Wed, 05 Jul 2017 16:07:20 EDT -04:00, updated_at: Thu, 10 Aug 2017 14:48:38 EDT -04:00>] 

사람이 말해 줄래?

그냥 좋은 측정을위한

레일 4.2.6 루비 2.3.0

+0

세계화가 뒤로하고 있지만 Model.where (특성 : "값"). to_sql "과"Model.where ('특성 =?', '값')를 비교하는 것은 잘 모르겠다. to_sql' 계몽일지도 모릅니다. 원본 테이블 데이터 (즉, ActiveRecord 노이즈가없는)를 보면 계몽적일 수 있습니다. –

+0

mu 너 천재 야. 블레. to_sql에 대한 귀하의 제안을 간략하게 살펴보면 번역 테이블에 번역이 없으면 조회 중에 변환해야하는 속성이있는 모델이 nil을 반환하므로 콜렉션이 비어 있음을 알 수 있습니다.내 광산 자체 애플 리케이션을 망 쳤어. 감사합니다 – trh

+0

그 해답을 답으로 바꾸는 것이 가치가 있습니다. 모든 마술은 일이 "일만하지 않으면"매우 혼란 스러울 수 있습니다. –

답변

2

감사합니다 @ MU-IS-너무 짧은 - 그것은 내 자신에 그것을 알아 내기 위해 촬영 한 것입니다 얼마나 아무 생각.

무슨 일이 일어나고 있었는지 알아내는 것은 SQL과 비교하는 두 개의 명령으로 변환하는 것이 었습니다. 그래서 나는 시도 된 것을 정확히 볼 수있었습니다. 그럼

=> "SELECT \"menus\".* FROM \"menus\" INNER JOIN \"menu_translations\" 
    ON \"menu_translations\".\"menu_id\" = \"menus\".\"id\" WHERE 
    \"menu_translations\".\"name\" = 'Lunch Boxes' AND 
    \"menu_translations\".\"locale\" = 'fr'" 

=> "SELECT \"menus\".* FROM \"menus\" WHERE (name = 'Lunch Boxes')" 

을 나는 psql의 콘솔에서 직접 쿼리를 실행하고, 다시 빈 세트 온 :

Menu.where(name: "Lunch Boxes").to_sql 
Menu.where('name = ?', "Lunch Boxes").to_sql 

이 각각 생산. 그것은 menu_translations 테이블에 합류 되었기 때문에의 세계화 보석과 함께 제공되는 모델 도우미, 즉 사용 가능 : 다음 SO

translates :name 

내가 번역 테이블을 확인을하고있는 용어 "도시락"didn를 그 어떤 번역에서도 존재하지 않으며 속성 name이 세계화되어 있기 때문에 번역이 필요합니다.

번역이 추가되어 문제가 해결되었습니다. 희망이 다른 사람을 도와줍니다.

0

그것은 모든 권리입니다. 이 데이터를 클래스에서 가져 오려고 시도하고 레일이 특수 문자에 대한 필터를 기다리고 있습니다.

더 많은 정보 - SQL Injection: 7.2.4 Countermeasures

+0

응? 당신이 오해했을 수도 있습니다. 당신이 읽도록 지시 한 문서의 섹션은 "또는 당신은 같은 결과를 위해 해시를 전달할 수 있습니다"라고 말합니다 - 단순히 해시를 전달하려고 시도하고 있는데, 내가 얻은 레코드 대신 빈 결과를 얻으려고합니다. SQL 부분을 사용합니다. 둘 다 유효한 문입니다. 해시 버전이 작동하지 않는 이유는 무엇입니까? 그게 내 질문이다. – trh

+0

@ trrh 보안 성이 부족한 것 같습니다 :) 하지만 당신의 요점을 이해했습니다. Rail v.5 +에서 이것을 시도하십니까? –

+0

아니요,이 앱의 레일 4에 붙어 있습니다. Boooooooooooooooooooo. – trh