2013-03-07 2 views
0

어떻게해야합니까?DB에서 삭제하지 않고 ActiveRecord 해시에서 요소 제거

all_tickets = Ticket.find(:all) 

all_tickets.each do |at| 
    if at "a condition" 
     all_tickets.delete(at) 
    end 
end 
내가 데이터베이스에서의 요소를 삭제이 코드

,하지만 난 단지 "조건"이 참일 때 all_tickets에서 액티브 - 해시를 상기 요소를 제거 할.

덕분에 도움

+0

힌트 : "조건"은 SQL에서 보내거나 요청할 수 없으며 외부 조건입니다. 따라서 all_tickets.find (: all, : conditions => ""조건)는 작동하지 않습니다. 감사. – Alex

답변

0

위해이 솔루션은 힌트 당 SQL을 사용하지으로 변환되었습니다. 간단히 말해, 티켓을 가져 와서 루프하고 조건이 참이면 특성에서 특정 키를 삭제하십시오. 마지막으로 이러한 속성을 사용하여 새 티켓 인스턴스 (레코드 아님)를 생성합니다.

나는 조건이 외적인 것임을 알고 있지만, 조건에 영향을 줄 객체에 attr_accessor를 추가하도록 제안합니다. 나는보기에서 이것을 활용하여 주어진 필드의 존재 여부에 의존하지 않고 전달 방법을 결정합니다. 여기서 많은 가정을하고 있지만 솔루션을 사용하면 이러한 유형의 작업이 필요한 기능에 대해 궁금한 점이 있습니다. 행운을 빌어 요.

all_tickets = Ticket.find(:all) 
processed_tickets = [] 
all_tickets.each do |ticket| 
    attributes = ticket.attributes 
    attributes.delete(:some_key) if some_condition? 
    processed_tickets << Ticket.new(attributes) 
end 
+0

제 암시를 읽으십시오, 조건은 SQL을 통해 질문 할 수 없습니다 ;-( all_tickets의 수가 매회 <10이므로 iterating이 문제가 아니어야합니다. 감사합니다! – Alex

관련 문제