2013-07-31 2 views
0

을 인식하지 여기에 모델mongoid 포함 된 문서의 기준이


class Scammer 
    include Mongoid::Document 
    field :email_used 
    field :phone_used 
    field :name_used 
    field :first_logged, type: DateTime 
    field :last_scam_attempt, type: DateTime 
    field :checked, type: Integer, default: 0 
    field :scams_count, type: Integer 
    field :common_commodity 
    field :status 
    embeds_many :reports 
    embeds_many :reporters 
    embeds_many :requestors 
end 

class Report 
    include Mongoid::Document 
    embedded_in :scammer 
    field :reported, type: DateTime 
    field :posed_as 
    field :encountered_through 
    field :commodity 
    field :details 
    field :logged_by 
end 

class Reporter 
    include Mongoid::Document 
    embedded_in :scammer 
    field :reporter_ip 
    field :captured, type: DateTime 
end 

class Requestor 
    include Mongoid::Document 
    embedded_in :scammer 
    field :requestor_ip 
    field :captured, type: DateTime 
end 

입니다 그리고 지금 여기에 내가



    # It's an email address, 
    if Scammer.where(email_used: @search_term).exists? 
     if not Scammer.requestors.where(requestor_ip: request.remote_ip).exists? 
     Scammer.requestors.create(requestor_ip: request.remote_ip, captured: DateTime.current()).save 
         end 
         @return = Scammer.where(email_used: @search_term).to_json 
        else 
         # No entry found. We should now add this to the database as a search 
         @newscammer = Scammer.new(email_used: @search_term, checked: 1, first_logged: DateTime.current(), status: "Seems Legit") 
         @newscammer.requestors.create(requestor_ip: request.remote_ip, captured: DateTime.current()) 
         @newscammer.save 
         @return = "{ 'message' : 'Email added to database' }" 
        end 

모든이 줄 때까지 작동이 모델로 뭔가를하려고 사용하고 코드입니다

Scammer.requestors.where(requestor_ip: request.remote_ip).exists?

이 줄은이 오류의 원인이됩니다.

undefined method `requestors' for Scammer:Class

저는 여기 Mongoid.org 및 다른 여러 게시물과 다른 게시판을 보았습니다. Scammers에 포함 된 Requestor 요소에 액세스하는 방법을 찾을 수 없습니다. 나는 Ruby에 익숙하지 않고 문제를 직접 해결하는 데 필요한 실사를하려고 노력하지만 나는 혼란 스럽다.

답변

0

대답을 찾았습니다. 모델에는 아무런 문제가 없습니다. 컨트롤러의 코드 블록입니다. 분명히

where
을 사용하여 객체를 반환하면 where, find 및 find_by와 같은 다른 함수를 검색하거나 사용할 수 없게됩니다.

나는 다음과 같은 코드 블록을 다시 쓴, 지금은 작동

if Scammer.where(email_used: search_term).exists? scammerRec = Scammer.find_by(email_used: search_term)

 # Even though we found the parent object, we still need to use the .where function to pull the parent again and check for the requestor_ip in the requestors embedded doc 
     if not Scammer.where(email_used: search_term, "requestors.requestor_ip" => request.remote_ip).exists? 
     scammerRec.requestors.create(:requestor_ip => request.remote_ip) 
     end 
     returnjson = Scammer.where(email_used: search_term).to_json 
    else 
     # No entry found. We should now add this to the database as a search 
     newscammer = Scammer.new(email_used: search_term, checked: 1, first_logged: DateTime.current(), status: "Seems Legit") 
     requestor = Requestor.new 
     requestor.requestor_ip = request.remote_ip 
     Scammer.collection.update(newscammer.selector, {'$push' => {requestors: requestor.as_document}}, multi: true) 
     newscammer.save 
     returnjson = "{ 'message' : 'Email added to database' }" 
    end 

관련 문제