1

사용자가 프로그래밍 과정의 학교 프로젝트를위한 프로그래밍 아이디어를 만들 수있는 웹 사이트를 구축 중입니다. 그들은 모든 아이디어를보고 다른 사용자가 만든 아이디어에 등록 (가입) 할 수 있습니다. 등록 단추는 사용자의 아이디어보기 페이지에 있습니다.레일 4 : 사용자가 다른 사용자에게 등록 (가입) 할 수있는 모델 연결을 구현하는 방법

조인 테이블처럼 작동하는 relationshipsmodel을 만들려고했으나 제대로 작동하지 않았습니다. 그런 다음 선생님은 등록을 통해 사용자 및 아이디어 모델을 연결하기 위해 전용 관계 테이블을 만들지 않고 has_many 연관을 만들 수 있다고 말했습니다.

나는 레일스에 익숙하지 않고 방금 Michael Heartl의 레일스 튜토리얼을 마쳤다.

아이디어가 홈 페이지에
class User < ActiveRecord::Base 
    has_many :ideas 
    has_many :enrolled_ideas, through: :enrollments, dependent: :destroy, class_name: "Idea" 

class Idea < ActiveRecord::Base 
    belongs_to :user 

WebappProject::Application.routes.draw do 
    resources :users 
    resources :sessions, only: [:new, :create, :destroy] 
    resources :ideas do 
    member do 
     get :enrolled 
    end 
    end 

(static_pages 컨트롤러), 사용자가 클릭 할 수있는 :

이 내 코드입니다. 그런 다음 show 액션을 통해 idea (ideas_controller)의 show 페이지로 보냅니다. 이 페이지 (사용자의 특정 아이디어)에서 "등록"버튼을 원합니다. 따라서 사용자가 아이디어 소유자를 클릭하면 사용자 쇼 페이지에 등록 된 모든 사용자를 나열 할 수 있습니다.

답변

1

레일스의 Has and Belongs To Many (HABTM) 테이블을 수행하는 두 가지 방법으로 중간 테이블을 사용합니다. 선생님이 의도 한 바는 세 번째 모델을 추가하지 않고 HABTM 관계를 수행 할 수있는 방법이 있다는 것입니다. 당신이

User.first.ideas #to get all the ideas a user created or is subcribed to 
Idea.first.users #to get all the users subscribed to an idea 
Idea.first.users << User.first # to subscribe the first user to the first idea 

를 실행할 수

class User < ActiveRecord::Base 
    has_and_belongs_to_many :ideas 
end 

class Idea < ActiveRecord::Base 
    has_and_belongs_to_many :users 
end 

이 방법을하지만 당신은 여전히이 경우 것 철도의 convetions 다음 중간 테이블에 대한 마이그레이션을 만들 필요가 : 그런 식으로 당신은 할 수 있습니다

class CreateUsersIdeas < ActiveRecord::Migration 
    def change 
    create_table :users_ideas do |t| 
     t.belongs_to :user 
     t.belongs_to :idea 
    end 
    end 
end 

이 관계 유형에 대한 자세한 내용은 http://guides.rubyonrails.org/association_basics.html (2.6 The hasand_belongs_to_many Association)

두 번째 방법은 당신이 지금과 같은 중간 모델이 필요합니까 관계 테이블에 필드를 추가 할 수 있기 때문에 더 유연 :

class User < ActiveRecord::Base 
    has_many :subscriptions 
    has_many :ideas, through: :subscriptions 
end 

class Subscriptions < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :idea 
end 

class Idea < ActiveRecord::Base 
    has_many :subscriptions 
    has_many :users, through: :subscriptions 
end 

처럼 여전히 중간 테이블을 만들 필요가 첫 번째 패턴을,이 시간 구독이라고하며 사용자와 아이디어를 모두 참조해야합니다. 다시 한 번 같은 페이지에서 2.4 has_many : through Association을 찾으십시오.

+0

감사합니다 !!, 나는 두 번째 옵션에 가서 별도의 구독 테이블을 만들었습니다. 사용자 측면에서, 나는 "has_many : subscribed_by, through : : subscriptions, source : : user"로 갔다. 이제 게시물에 등록 된 모든 사용자를 검색 할 수있다. –

관련 문제