2010-06-21 6 views
0

저는 레일에 안돼서 하루 종일 조사했습니다. 나는 내 문제가 쉽다고 생각한다. '해시로 값을 레일에 직접 저장하는 방법을 찾을 수 없습니다.

record = {:question_id=>'111111', :tag_id=>'22222'} 

그리고 어떤 모델이있다 :

테이블 questions_tags_relation있다, 그것은 두 개의 열 (ID 없음)이 있습니다

columns: 
question_id -> string 
tag_id -> string 

을 그리고 나는 해시이 QuestionsTags의, 나는 그것을 만들고 싶지 않습니다.

이제 ActiveRecord::Base.connection을 얻을 수 있지만 간단한 코드를 사용하여 테이블에 해시를 삽입하는 방법은 무엇입니까? 이러한 방법은

ActiveRecord::Base.connection.save 'questions_tags', record 

있습니까 : 나는이가 save 방법입니다 희망?


내가 액티브 모델을 사용하여 데이터베이스에 데이터를 저장할 때 나는 몇 가지 문제를 만난 때문에 나는이 질문을 부탁 해요

UPDATE. 아마도 connection을 사용하면 더 간단해질 것입니다. 테이블 중 일부는 join 테이블입니다. 기본 키가 없기 때문에 내 예제에는 id이 없습니다. 해시를 테이블에 저장하는 간단한 방법이 있기를 바랍니다. 그러나 찾을 수 없습니다. 고마워, 친구

+1

일종의 고유 인덱스를 사용하지 않는 것은 나쁜 DB 디자인입니다. id 열이없는 이유가 있습니까? – jigfox

+1

프로그래머는 잘못된 것을 보았을 때 조언을하는 경향이 있습니다 (실수로 인식하는 사람조차도). 나는 답을 모른다. 그러나 당신의 업데이트 소리는 나에게 그렇게 들리지 않는다. –

+0

@Vijay, 감사합니다. 나는 지금 그것을 고치고있다. – Freewind

답변

1

다 대다 관계에 대한 junction 테이블에서 ID 필드가 없어야합니다. 사실, 레일스는 물건을 혼란스럽게하기 때문에 그렇게하려고하면 큰 소리로 실패 할 것입니다.

일반적으로 조인 모델을 만들지 않으려면 has_and_belongs_to_many을 사용하면됩니다. 그런 다음 @question.tags이라고 말하면 적절한 표를 통해 합류 할 수 있습니다. 적절한 테이블 이름을 사용해야합니다 (또는 : join_table로 대체). 당신이 연결을 만든 후에

, 당신과 같이 사용할 수 있습니다 :

@question.tags << Tag.first 
@question.tags.each { |t| t.name } 
# ... and so on 

편집 : 나는이 데이터베이스에 연결하는 방법에 대한 질문에 대답하지 않는 알고 있지만 나는 희망 중개 테이블에 대한 조인 모델을 만들지 않고 다 대다 관계에 액세스하는 방법에 대한 질문에 답하는 것입니다.

+0

정말 고마워요, 당신은 제가 '접합점'이라는 단어를 알았을 때, 영어로 된 이런 종류의 테이블 이름이 궁금합니다.그리고 당신의 대답은 도움이됩니다, 감사합니다 :) – Freewind

+0

좋아요! 그것은 당신의 질문에 답하거나 아직도 필요한 것이 있습니까? – wesgarrison

+0

일부 ActiveRecord 소스 코드를 읽었으며 레일스가 Java와 같은 '준비된 명령문'을 가지고 있지 않다는 것을 알았습니다. 테이블에 해시를 삽입 할 방법이 없다고 생각합니다. 복잡하고 그리 유용하지 않기 때문입니다. – Freewind

0

ID를 원하지 않으면 가장 좋은 방법은 DB에 직접 주소를 지정하는 것입니다. 그렇지 않으면 id feild를 추가하고 모델을 작성하십시오. 그럴만 한 이유가 있다면 이유가 없다면 할 수있는 일입니다.

관련 문제