2010-07-09 2 views
0

연락처 테이블에서 일련의 연락처를 찾는 컨트롤러가 있습니다.해당 모델의 메소드를 기반으로 모델을 필터링하거나 찾으려면 어떻게합니까?

@contacts = @campaign.contacts.find(:all, :order => "date_entered ASC") 

contact.rb (모델)의 방법은 이것이다 : 현재는 다음과 같습니다 대부분의 경우

def status 
    return if statuses.empty? 
    a= statuses.find(:last).status << ' (' << statuses.find(:last).created_at.to_s(:long) << ')' 
    return a 
end 

, "상태"에 값이있는 경우, I 더 이상보기에 표시하지 않으려 고합니다.

지금 상태는 다형성입니다. 그건 바보 같은 생각이 있었어요 수도 있지만, 내가 다른 모델에 적용 할 상태의 개념을 원 : 나는 내가 @contacts 인스턴스에 그 조건을 추가 할 수있는 경우, 즉 돌볼 것이라고 가정하고

class Status < ActiveRecord::Base 
    attr_accessible :statusable_id, :statusable_type, :status 

    belongs_to :statusable, :polymorphic => true 

end 

# == Schema Information 
# 
# Table name: statuses 
# 
# id    :integer   not null, primary key 
# statusable_id :integer 
# statusable_type :string(255) 
# status   :string(255) 
# created_at  :datetime 
# updated_at  :datetime 
# 

을 그것. 그러나 컨트롤러에 .find 메서드를 사용하여 해당 조건을 작성하는 방법을 알지 못합니다 (올바른 방법 일 경우).

감사합니다.

답변

2

나는 contact has_many statuses이라고 가정합니다. 앱의 나머지 부분에 대해서는 확신하지 못하지만 위 코드에서 알 수 있듯이 마지막 상태에만 관심이있는 것으로 보입니다. 따라서 has_many 대신 상태와 속성을 만드는 것이 더 나을 것입니다.
그러나 다른 요구 사항에 대해 has_many 연결이 필요하다고 가정하면, 사용자가 수행 한 작업이 합리적인 것처럼 보입니다.

+0

안녕하세요.하지만 조건으로 무엇을합니까? 나는 has_many에 머무를 지 모르겠다. 나는 * 내가 * 상태 변화에 따른 변화를 추적 할 수 있다고 생각한다. 그러나 확실하지는 않다. 나는 또한 다형성을 통해 모든 모델을 여러 개의 모델로 만드는 것을 생각하고 있었다. 그러나 내가 해낸다면 훨씬 더 간단해질 것이다. – Angela

0

NM의 대답을 확장하려면 has_one latest_status 관계를 설정하고 : join 옵션을 사용하는 것이 좋습니다. Active Record Base 페이지의 http://api.rubyonrails.org/classes/ActiveRecord/Base.html에 문서화되어 있습니다. 조인을 검색하면됩니다.

조인 된 테이블을 검색하고 관계를 이미 최신 상태로 정의했다면 원하는 것이 맞을 것입니다. 그렇습니까?

+0

안녕하세요 아직 조건이 없습니다 .... 상태를 사용하겠습니까? 없는? 공백? – Angela

+0

다음과 같은 오류가 발생했습니다. SQLite3 :: SQLException : 해당 열 없음 : status.id – Angela

+0

SQLite3 워드 프로세서가 없지만 null 값과 일치하는 where 절은 "WHERE status.field IS NULL "입니다. 네가 묻고있는거야? – jasonpgignac

관련 문제