首页 > 解决方案 > Rails one_to_many 关联不起作用

问题描述

我正在尝试通过用户和团队的示例来模拟 Rails 中的一对多关系。

在我的示例中,用户只能有一个团队,而团队可以有多个用户。用户包含 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

编辑:什么不起作用?=> 当我尝试这样做时team.users,它显示用户功能的 NoMethodError。

我相信这是因为我使用的是 Slack Ruby bot gem(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?slack-ruby-bot gem 提供了扩展 slack 命令的功能,当用户键入该命令时,它会给出回调。

在这里,我将其用作:

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

如您所见,团队由 slack-ruby-bot 的内部实现返回。

请帮助我理解为什么这不起作用

标签: ruby-on-railsactiverecordassociationsslack-api

解决方案


我希望它会帮助你。

相对而言,我们可以访问如下数据

Team.all[0].users

Team.first.users

User.first.team

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


推荐阅读