Rails one_to_many Ассоциация не работает - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь смоделировать отношения один-ко-многим в рельсах на примере пользователя и команды.

В моем примере пользователь может иметь только одну команду, а команда может иметь несколько пользователей. пользователь содержит поле team_id

Схема:

  create_table "teams", force: :cascade do |t|
    t.string "slack_team_id"
    t.string "name"
    t.boolean "active", default: true
    t.string "domain"
    t.string "token"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "bot_user_id"
    t.string "activated_user_id"
    t.string "activated_user_access_token"
    t.string "question_time", default: "10:00", null: false
  end

  create_table "users", force: :cascade do |t|
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "user_name"
    t.string "nickname"
    t.string "slack_user_id"
    t.bigint "team_id"
    t.index ["team_id"], name: "index_users_on_team_id"
  end

add_foreign_key "users", "teams"

Модель команды:

class Team < ApplicationRecord
  has_many :users
end

Модель пользователя:

class User < ApplicationRecord
  belongs_to :team
end

EDIT: Что не работает? => Когда я пытаюсь сделать team.users, он говорит NoMethodError для функции пользователя.

Я считаю, что это потому, что я использую бот Slack Ruby (https://github.com/slack-ruby/slack-ruby-bot-server)

Здесь модель команды уже указана: https://github.com/slack-ruby/slack-ruby-bot-server/blob/master/lib/slack-ruby-bot-server/models/team/methods.rb

Я чувствую, что использую эту модель команды, а не созданную мной модель команды. Любые указатели на то, как я могу сказать, что он должен использовать мою собственную модель команды.

РЕДАКТИРОВАТЬ 2 =>

Как я получаю доступ к team.users? Gem slack-ruby-bot предоставляет функциональные возможности для расширения команды slack и будет вызывать обратный вызов при вводе этой команды пользователем.

Здесь я использую это как:

class Give < SlackRubyBot::Commands::Base
  def self.call(client, data, match)
   team = client.owner
   puts team.users
  end
end

Как видите, команда возвращается внутренней реализацией slack-ruby-bot.

Пожалуйста, помогите мне понять, почему это не работает

1 Ответ

0 голосов
/ 24 апреля 2019

Надеюсь, это поможет вам.

В отношении мы можем получить доступ к данным, как показано ниже

Team.all[0].users

Team.first.users

User.first.team

Team.all.map{|t| t.users}

...