2011-04-05 1 views
1

두 테이블, nodesterms이 있습니다. nodesDataMapper를 사용하여 외래 키를 통해 값 가져 오기

관련 필드는 : nid (기본 키) 및 terms에서 value
, 그들은 : valuetid 함께 기본 키와 nid있다 value, tidnidnodes.nid를 참조하는 외래 키 .

terms에 레코드를 추가하고 싶습니다. 나는 tidnid이고 value 나는 해당 node에서 당기고 싶다 - 예를 들면. 주어진 nid에 대해 value을 찾아 node에 입력 한 다음 valueterms으로 입력하십시오.

가있을 수 있습니다 SQL에서이 작업을 수행하는 방법 :

INSERT INTO terms(tid, nid, value) 
values(mytid, mynid, (
    select value from nodes where nid=mynid 
)); 

누군가가 나를 DataMapper으로이 작업을 수행하는 데 도움이 있을까요?

class Node 
    include DataMapper::Resource 

    property :nid, Serial, :key => true 
    property :value, Integer 

end 


class Term 
    include DataMapper::Resource 

    property :tid, Integer, :key => true 

    # how do I define nid and value? 
end 

# and then what do I give to Term.new or Term.create and how? 

누구든지 나를 DataMapper에 대한 좋은 지침서로 안내 할 수 있으면 감사하겠습니다. 나는 그들의 온라인 문서를 사용 해왔다. 그러나 나는 자신이 발견 한 상황이 거의 다뤄지지 않는 것을 발견했다. 당신의 설명에서

+0

을 나는 의사의 확인을하지만, 지원을 발견 IRC에 좋았어. 내가 가진 다음 질문을 확인하십시오. 답은 관계 및 쿼리를 수행하는 방법을 설명했습니다. http://stackoverflow.com/questions/2826439/beginning-with-datamapper-association-question –

답변

1

당신이 찾고있는 모델은 그런 설정해야한다 :

class Node 
    include DataMapper::Resource 

    property :nid, Serial 
    property :value, Integer 
end 

class Term 
    include DataMapper::Resource 

    property :tid, Integer, :key => true 
    property :value, Integer, :key => true 

    belongs_to :node, :child_key => :nid 
end 

당신은 그런이 모델로 작업 할 수 있습니다 :

# create a node 
node = Node.create(:value => 123) 

# create a term and associate it with the node 
term = Term.create(:tid => 321, :node => node, :value => node.value) 
+1

답변 해 주셔서 감사합니다. 이것이 정말로 이것이 할 수있는 유일한 방법입니까? 그것이 내가 처음에 그것을하는 방법을 생각한 것이기 때문에, 모델을 잘 정의하면, 내가 Term.create (: tid => 321, : nid => 999)를 할 수있는 방법이있을 거라고 생각했기 때문에 내부적으로이를 "노드를 사용하여 nid 999를 찾은 다음 tid = 321, nid = 999, vid = 그곳에서 찾은 것을 삽입하십시오"로 변환합니다. Term 내에서 메소드를 작성하여 세부 사항을 숨길 수는 있지만 DataMapper가 잘 플러시 아웃 된 모델로 처리 할 수 ​​있다고 생각했습니다. 어쩌면 많이 묻는 것일 수도 있습니다. – hsiu

+0

당신은 self.value = node.value를 할 것이기 전에 save hook을 설정할 수있다. – solnic