2011-07-27 2 views
0

이것은 나에게 악몽이었고 나는 나를 도울 수있는 사람에게 팔과 눈알을 기꺼이 주었다. 나는 이것을 최대한 잘 설명하려고한다.many_to_my_to_my 여러 연관 관계

사용자가 '프로필'을 편집하면 중첩 된 속성 필드에있는 스킬을 입력 할 수 있습니다. '다른 스킬 추가'를 클릭하면 입력 할 수있는 다른 필드가 채워집니다. 입력이 시작되면 jquery-autocomplete가 시작됩니다. 자동 완성에서 항목을 선택해야합니다. 그들은 저장하면, 예를 들어, 3 개 기술, 우리는이를 얻을 :

테이블 : 나는 실제 기술 이름을 저장되지 않습니다 수행 할 작업을 이제 skills

+-----------+----------------+ 
| user_id |  skill  | 
+-----------+----------------+ 
|  4  | Photoshop  | 
+-----------+----------------+ 
|  4  | Illustrator | 
+-----------+----------------+ 
|  4  | InDesign  | 
+-----------+----------------+ 

. 대신, skills_vocabulary list (jquery-autocomplete가 사용하는 것)의 스킬 ID를 저장하고 싶습니다.

테이블 : skills_vocabulary

+------+----------------+ 
| id |  skill  | 
+------+----------------+ 
| 1 | Illustrator | 
+------+----------------+ 
| 2 | Dreamweaver | 
+------+----------------+ 
| 3 | After Effects | 
+------+----------------+ 
| 4 | InDesign  | 
+------+----------------+ 
| 5 | Photoshop  | 
+------+----------------+ 
| 6 | Flash   | 
+------+----------------+ 

따라서, skills 테이블은 다음과 같이한다 : 어떤 도움을 크게, 크게, 크게 감상 할 수

+-----------+----------------+ 
| user_id | skill_id | 
+-----------+----------------+ 
|  4  |  5  | 
+-----------+----------------+ 
|  4  |  1  | 
+-----------+----------------+ 
|  4  |  4  | 
+-----------+----------------+ 

. 나는이 일로 3 개월 동안 난처하게 굴 었어.

감사합니다.

EDIT/

<%= f.fields_for :skills do |builder| %> 
    <%= render "skills_fields", :f => builder %> 
    <% end %> 
    <p><%= link_to_add_fields "Add a Skill", f, :skills %></p>  

_skills_fields.html.erb

<div class="fields ac skills"> 
    <div class="clearfix"> 
     <span class="left"><%=f.autocomplete_field :name, users_autocomplete_skills_vocab_name_path, :class => 'restricted_to_autocomplete' %></span><span class="remove_link left"><%= link_to_remove_fields "[x]", f %></span> 
    </div> 
</div> 

편집 2/

지금은 그냥

skill.rb

class Skill < ActiveRecord::Base 
    belongs_to :user 
end 
,369입니다

user.rb

class User < ActiveRecord::Base 
    has_many :tskills, :dependent => :destroy 
    accepts_nested_attributes_for :tskills, :allow_destroy => true, :reject_if => lambda { |a| a[:name].blank? } 
end 

skills_vocabulary.RB

class SkillsVocabulary < ActiveRecord::Base 

end 

내 컨트롤러 코드는 기본 인덱스, 쇼, 새, 생성, 업데이트,

기술의 목록을 파괴하는 것입니다 (길이 약 10,000 항목) 테이블에 skills_vocabularies

+1

http://loopj.com/jquery-tokeninput/을 사용하는 것이 좋습니다. 그것을위한 railscast가있다 : http://railscasts.com/episodes/258-token-fields. 그렇지 않다면, https://github.com/crowdint/rails3-jquery-autocomplete의 코드를 살펴보고 물건을 바꾸기 시작하십시오. – rubish

+0

또한 자동 완성 기능을 추가하려면 SO 질문 (http://stackoverflow.com/questions/6727183)을 참조하십시오. 이것은 사용자가 새로운 기술을 추가하기 위해 계속해서 클릭하는 것보다 매끄 럽습니다. – rubish

+0

@Rubish 저는 실제로 현재 rails3-jquery-autocomplete를 사용하고 있습니다 - 우리는 자동 완성되지 않은 것을 데이터베이스에 자동으로 추가하도록 결정할 수도 있습니다 . 그것은 나를 괴롭히는 vocab 테이블에 대한 참조 일뿐입니다. – stewart715

답변

3

이해야

class User < ActiveRecord::Base 
    has_and_belongs_to_many :skills 
end 

class Skill < ActiveRecord::Base 
    has_and_belongs_to_many :users 
end 

이 그들에게

,536을 만들어 마이그레이션입니다 : 수업 수
class CreateUsers < ActiveRecord::Migration 
    def self.up 
    create_table :users do |t| 
     t.string :name 
     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :users 
    end 
end 

class CreateSkills < ActiveRecord::Migration 
    def self.up 
    create_table :skills do |t| 
     t.string :name 
     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :skills 
    end 
end 

class SkillsUsers < ActiveRecord::Migration 
    def self.up 
    create_table :skills_users, :id => false do |t| 
     t.integer :skill_id 
     t.integer :user_id 
    end 
    end 

    def self.down 
    drop_table :skills_users 
    end 
end 

는 새로운 기술이 추가로 간단한 업데이트

자세한 내용

FO here
user.skills << Skill.find(1) # to add a skill 
user.skills = Skill.all  # to add many of them 

같은 :
내가 자동 완성 보석을 시도했습니다 그리고 난 당신이 쓰래기 네요 굽타의 제안을 수용해야한다고 생각 , 즉 내 모델 플러스 jquery token input을 사용하면 꽤 많은 일대 다 연관을 처리 할 것이기 때문이다. 내가 본 것처럼 자동 완성 보석은 1 대 n 연관을위한 것입니다.

더욱이 당신은 full working example의 레일을 가지고 놀 수 있습니다.

+0

감사합니다.이 설정은 내가 설정 한 작업에 대해 확실하지 않습니다. 양식 필드로 내 질문을 편집했습니다. 이게 효과가 있니? – stewart715

+0

rails3-jquery-autocomplete gem을 모르므로 직접 질문에 대답 할 수 없습니다. BTW 내 예제는 서버 부분에만 관련되어 있기 때문에 사용자의 필요에 맞을 것이라고 생각합니다. 따라서 컨트롤러와 모델 코드로 질문을 업데이트해야합니다. – Fabio

+0

편집 됨, 다시 ... 시간을내어 주셔서 대단히 감사드립니다. jquery gem은 텍스트 필드를 자동 완성합니다. 저장되는 곳은 다른 일반 텍스트 필드와 같습니다. – stewart715

관련 문제