имя_класса не работает через ассоциацию has_many в Rails - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть две модели, Agent и AgentCommand, и вот как выглядит ассоциация в моделях:

# models/agent.rb
has_many agent_commands, foreign_key: "agent_id", class_name: "Task"

.

# models/agent_command.rb
belongs_to :agent

Однако, когда я пытаюсь для вызова Agent.first.commands, я получаю эту ошибку:

2.5.1 :002 > Agent.first.tasks
  Agent Load (1.4ms)  SELECT  "agents".* FROM "agents" ORDER BY "agents"."id" ASC LIMIT $1  [["LIMIT", 1]]
Traceback (most recent call last):
        1: from (irb):2
NoMethodError (undefined method `tasks' for #<Agent:0x00007fcc005c2960>)
Did you mean?  company

Вот как выглядят файлы миграции для обоих:

# db/migrations/date_create_agent_commands.rb
class CreateAgentCommands < ActiveRecord::Migration[5.2]
  def change
    create_table :agent_commands do |t|
      t.belongs_to :agent
      t.text :command
      t.boolean :completed, :default => false

      t.timestamps
    end
  end
end

и

# db/migrations/date_create_agents.rb
class CreateAgents < ActiveRecord::Migration[5.2]
  def change
    create_table :agents do |t|
      t.references :company
      t.string :name
      t.timestamps
    end
  end
end

Не Я совершенно уверен, почему это не работает, так как я думал, что помню, как делал это в прошлом. Просто попытка вызвать модель AgentCommand с Agent через псевдоним Task, чтобы я мог использовать Agent.first.tasks и увидеть список agent_commands

Любая помощь будет очень оценили. В настоящее время используется Rails 5.2.3

1 Ответ

0 голосов
/ 28 февраля 2020

Только что понял это. По-видимому, у меня есть:

has_many agent_commands, class_name: "Task"

, когда это действительно должно быть наоборот

has_many :tasks, class_name: "AgentCommand"

После внесения этого изменения это сработало как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...