2014-12-11 5 views
2

has_many : through 연관 문제가 있습니다. 모델은 다음과 같이 :액티브 레코드 has_many에 레코드를 추가하는 방법 : 레일의 연결을 통해

class User < ActiveRecord::Base 
    has_many :roles 
    has_many :datasets, through: :roles 
    has_secure_password 
end 

class Role < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :dataset 
end 

class Dataset < ActiveRecord::Base 
    has_many :roles 
    has_many :users, through: :roles 
end 

내가 역할에 새 데이터 집합이 생성 될 때마다 레코드를 추가 할 수 있습니다. 새 데이터 집합, 기존 사용자 'Admin'을 사용하여 을 만들고 역할의 열 이름을 'Admin'으로 설정해야합니다.

나는 Stackoverflow에서 찾은 모든 것을 시도했지만 아무 것도 나를 위해 작동합니다.

DatasetController의 방법을 만들어 내는이 보인다 :

def create 
    @dataset = Dataset.new(dataset_params) 
    @dataset.save 
    @user = User.find_by(name: 'Admin') 
    @dataset.users << @user 
    #@dataset.roles.create(user: @user, dataset: @dataset, name: 'Admin')  
    respond_with(@dataset) 
    end 

내가 << 연산자와 create 방법을 모두 시도했다. 에서

첫 번째 결과 :

ActiveRecord::UnknownAttributeError in DatasetsController#create 
unknown attribute: dataset_id 

에서 두 번째 : 나는 이러한 오류를 얻을 이유

ActiveModel::MissingAttributeError in DatasetsController#create 
can't write unknown attribute `user_id 

사람이 알고 있나요?

내 schema.rb :

create_table "datasets", force: true do |t| 
    t.string "name" 
    t.text  "description" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

create_table "roles", force: true do |t| 
    t.string "name" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

create_table "users", force: true do |t| 
    t.string "name" 
    t.string "mail" 
    t.string "password_digest" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 
+0

당신은 당신의'schema.rb'을 게시 할 수 있습니까? 그냥 3 모델 –

+1

덕분에, 그것은 내 질문에 지금 .. – nothiing

답변

0

귀하의 Role 모델은 열 UserDataset이 속하는를 참조 할 필요가있다. 이것들이 없으면 누가 누구에게 속한 것인지 모른다.

그래서 당신은 단순히 이러한 열을 추가 할 마이그레이션을 만들어야합니다

class AddRefererColumnsToRole < ActiveRecord::Migration 
    def change 
    add_column :roles, :user_id, :integer 
    add_column :roles, :dataset_id, :integer 
    end 
end 
+1

고마워요! 나는 이것이 모델 들간의 의존성 때문에 추가되었을 것이라고 생각했다. 그러나 그것은 아마도 너무 쉬웠을 것입니다. 잘 작동 지금, 감사합니다 :) – nothiing