2014-07-09 2 views
0

레일즈 콘솔에서 데이터베이스의 관계형 테이블 UserRole에 어떻게 액세스합니까?레일 콘솔에서 관계형 테이블에 액세스하는 방법

스키마 :

ActiveRecord::Schema.define(version: 20140709163149) do 
    create_table "users", force: true do |t| 
    t.string "stuff" 
    ... 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

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

    create_table "user_roles", force: true do |t| 
    t.integer "user_id" 
    t.integer "role_id" 
    ... 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    add_index "user_roles", ["role_id"], name: "index_user_roles_on_role_id" 
    add_index "user_roles", ["user_id"], name: "index_user_roles_on_user_id" 

레일 콘솔에서, 나는 User.all()을하고 모든 사용자를 얻을, 나는 Role.all() 할 수 있지만 어떻게 관계 테이블 user_role에 액세스 할 수 있습니까? 궁극적으로 데이터베이스를 시드 할 수 있습니다. 내가 UserRole.all()하려고하면

, 나는 다음과 같은 얻을 :

NameError: uninitialized constant UserRole 
    from (irb):7 
    from /Users/dejanew/.rvm/gems/[email protected]/gems/railties-4.1.1/lib/rails/commands/console.rb:90:in `start' 
    from /Users/dejanew/.rvm/gems/[email protected]/gems/railties-4.1.1/lib/rails/commands/console.rb:9:in `start' 
    from /Users/dejanew/.rvm/gems/[email protected]/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:69:in `console' 
    from /Users/dejanew/.rvm/gems/[email protected]/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:40:in `run_command!' 
    from /Users/dejanew/.rvm/gems/[email protected]/gems/railties-4.1.1/lib/rails/commands.rb:17:in `<top (required)>' 
    from /Users/dejanew/Dropbox/dev/SDF/bin/rails:8:in `<top (required)>' 
    from /Users/dejanew/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
    from /Users/dejanew/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
    from -e:1:in `<main>' 

답변

1

이 간단한 솔루션입니다.

디렉토리는 user.rb, user_role.rbrole.rb이어야합니다. user_role.rb는 다음과 같은 형태

는 :

또한

class UserRole < ActiveRecord::Base belongs_to :user belongs_to :role end

주의, Role에 대한 type 필드 single table inheritance를 트리거 할 수있다.

+0

단일 테이블 상속에 대한 메모 주셔서 감사합니다. 마이 그 레이션에서 수정했습니다. –

+0

아!이 '스캐 폴드'가 사용되지 않아서 왜 생성되지 않았습니까? 프레임 워크를 완전히 이해할 때까지는 바로 가기를 사용하는 것이 정말 싫어합니다! –

0

당신은 app/models/user_role.rbUserRole라는 모델을 정의 할 필요가있다.

User.all()Roll.all()을 사용하면 정의 된 클래스 (아마도)는 각각 app/models/user.rbapp/models/role.rb으로 정의됩니다. 당신은 이 아닙니다.은 레일스 콘솔에서 사용할 수있는 통어론을 통해 테이블에 직접 액세스 할 수 있습니다. 애플리케이션 코드에 의해 정의 된 일반 오래된 클래스를 사용하기 만하면됩니다. UserRole에 대해서도 동일한 작업을 수행해야합니다.

0

사용자 및 역할은 데이터베이스 테이블이 아닙니다. 모델은 Rails에서 ActiveRecord :: Base로부터 상속받은 Ruby 클래스를 의미하는 단어입니다.

rails generate과 함께 class User < ActiveRecord::Base ... end을 입력 할 때 /app/models/user.rb에 사용자 모델을 정의했습니다. 레일스는 자동으로 사용자 및 역할 모델을 usersroles 테이블까지 연결합니다. 그러나 이는 우연한 일입니다. /app/models에 정의 된 클래스가 있으므로 usersroles이라는 데이터베이스 테이블이 있기 때문에 사용자 및 역할이 존재합니다.

UserRole이라는 모델을 갖고 싶다면 모델을 정의해야합니다. /users/models/user_role.rb을 생성하거나 생성하여 class UserRole < ActiveRecord::Base ... end을 입력하면됩니다.