2015-12-02 3 views
-1

У меня есть две модели: пользователь и языковая модель. Один пользователь может иметь три разных языка. Я хочу показать пользователям один язык.У пользователя есть 3 языка

class User < ActiveRecord::Base 
 
    # Include default devise modules. Others available are: 
 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
 
    devise :database_authenticatable, :registerable, 
 
     :recoverable, :rememberable, :trackable, :validatable, 
 
     :omniauthable, omniauth_providers: [:facebook] 
 
    has_many :messages, dependent: :destroy 
 
    has_many :pictures, dependent: :destroy 
 
    has_many :posts, dependent: :destroy 
 
    has_many :comments, dependent: :destroy 
 
    belongs_to :first_language, class_name: 'Language' 
 
    belongs_to :second_language, class_name: 'Language' 
 
    belongs_to :third_language, class_name: 'Language' 
 
end

class Language < ActiveRecord::Base 
 
    has_many :users, foreign_key: "first_language_id" 
 
    # How to do the same with second and third language ? 
 
end

И для контроллера языков, я не знаю, как найти пользователей, которые говорят (первый, второй или третий язык) язык !

class LanguagesController < ApplicationController 
 
    before_action :authenticate_user! 
 
    before_action :find_language, only: :show 
 

 
    def show 
 
    @users = @language.users 
 
    # How to select the users who speak first, second or third language ? 
 
    end 
 

 
    private 
 
    def find_language 
 
     @language = Language.find(params[:id]) 
 
    end 
 
end

схема пользователя:

create_table "users", force: :cascade do |t| 
 
    t.string "email",     default: "", null: false 
 
    t.string "encrypted_password",  default: "", null: false 
 
    t.string "reset_password_token" 
 
    t.datetime "reset_password_sent_at" 
 
    t.datetime "remember_created_at" 
 
    t.integer "sign_in_count",   default: 0, null: false 
 
    t.datetime "current_sign_in_at" 
 
    t.datetime "last_sign_in_at" 
 
    t.inet  "current_sign_in_ip" 
 
    t.inet  "last_sign_in_ip" 
 
    t.datetime "created_at",       null: false 
 
    t.datetime "updated_at",       null: false 
 
    t.string "provider" 
 
    t.string "uid" 
 
    t.string "picture" 
 
    t.string "first_name" 
 
    t.string "last_name" 
 
    t.string "token" 
 
    t.datetime "token_expiry" 
 
    t.integer "first_language_id" 
 
    t.integer "second_language_id" 
 
    t.integer "third_language_id" 
 
    t.string "description" 
 
    end

Языки схемы:

create_table "languages", force: :cascade do |t| 
 
    t.string "title" 
 
    t.datetime "created_at", null: false 
 
    t.datetime "updated_at", null: false 
 
    end

+0

пожалуйста вставить атрибуты пользователя и языковой модели. –

+0

Я просто отредактировать его – Thib44

ответ

0
class User < ActiveRecord::Base 
    belongs_to :first_language, class_name: 'Language' 
    belongs_to :second_language, class_name: 'Language' 
    belongs_to :third_language, class_name: 'Language' 
end 

class Language < ActiveRecord::Base 
    has_many :users 
end 

Вы можете получить доступ к пользователям конкретного языка путем

@language.users 
+0

Это не работает ... Я думаю, что я должен использовать внешний ключ: класс Язык Thib44

Смежные вопросы