2012-03-16 3 views
0

레일스 3에서 어떻게 가상 속성을 검색하여 레코드를 검색 할 수 있습니까? 나는 name 열과 간단한 수정을 수행하는 slug을 가지고 있습니다 (아래 코드 참조). slug에서 name까지 "역방향 조회"를 수행하려면 어떻게해야합니까? 가상 속성으로 ActiveRecord 레코드를 얻는 방법은 무엇입니까?

나는 아래 find_by_slug 방법에 대한 올바른 코드를 찾으려고 노력 해요 :

class Brand < ActiveRecord::Base 
    has_many :sale_items 
    validates :name, :uniqueness => true 

    def slug 
    self.name.downcase.gsub(/\s/, '-') 
    end 

    def self.find_by_slug(given_slug) 
    first(slug: given_slug) 
    end 
end 

나는 내가 Unknown key: slug 오류 주어진있어 레일 콘솔에서 find_by_slug을하려고하면.

This 질문은 유사하지만 내 문제와 같은지 확실하지 않습니다. 나는 통찰력과 도움을 주셔서 감사합니다!

답변

1

데이터베이스에 slug가 없으므로 먼저 쿼리 할 수 ​​없습니다. 당신이해야 할 일은 그 이름을 찾는 것입니다. 그러나 그렇게하기 위해서는 '슬러그 이름'매핑이 되돌릴 수 있어야합니다. 당신이 다음 find_by_name을 수행 할 수 있습니다 - 당신은 당신이 이름이 될 것입니다 알고,

name = 'San Francisco' 
slug = convert_to_slug(name) #san-francisco 
name == convert_to_name(slug) #true 

그래서 그 슬러그를 제공 할 수 있어야합니다. '이 유일한 공간은 모든 첫 글자가 대문자'처럼 당신이 우리와 함께 공유하지 않는 몇 가지 암시 적 정보가이 아니라면 지금 당신의 슬러그 변환

downcase.gsub(/\s/, '-') 

은 되돌릴 수 없습니다. 따라서이 작업을 수행 할 수 없으며,이 작업을 가상의 작업이 아닌 일반 작업으로 만드는 것이 가장 좋습니다. 일부 이름은 하이픈이 있고 다른 사람이 단어 사이에 공백이 있기 때문에 전환은 되돌릴 수 있다면, 당신은 단지 당신이 옳은 것

find_by_name(convert_to_name(slug)) 
+0

를 사용해야합니다, 그것은 되돌릴 수 없습니다입니다. 나는 너의 충고를 받아서 그것을 규칙적인 속성으로 만들 것이다. –

관련 문제