Попытка связать / запросить Rails между двумя моделями выдает ошибки - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь создать связь между двумя моделями (Submissions & Agent Activity), с помощью которой каждый агент может регистрировать активность в отношении отправки, не изменяя саму фактическую запись отправки.

Это мои rb-файлы, и я считаю, что они настроены правильно:

class Submission < ApplicationRecord
    belongs_to :user, :optional => true

    belongs_to :location, :optional => true

    has_many :agent_activities

end


class AgentActivity < ApplicationRecord

    belongs_to :submission, :optional => true #has submission_id foreign key in table
    belongs_to :agent, :optional => true #has agant_id foreign key in 
table


end

Однако я теряюсь, когда дело доходит до отображения этой ассоциации в контроллере. В настоящее время мой код выглядит так:

@submissions = Submission.where(:Desired_Location => current_agent.Company_Business_Location).pluck(:AgentActivity)

Однако я получаю эту ошибку, когда делаю это

PG::UndefinedColumn: ERROR: column "AgentActivity" does not exist 
LINE 1: SELECT "AgentActivity" FROM "submissions" WHERE 
"submissions... ^ : SELECT "AgentActivity" FROM "submissions" WHERE 
"submissions"."Desired_Location" = $1

Кроме того, когда я запускаю

Submission.where(:Desired_Location => 
current_agent.Company_Business_Location).map(&:AgentActivity)

Я получаю эту ошибку:

undefined method `AgentActivity' for #<Submission:0x007fc78601e168> 
Did you mean? agent_activities

И когда я бегу:

AgentActivity.joins(:submission).where('submission.Desired_Location' 
=> current_agent.Company_Business_Location)

Я получаю эту ошибку:

PG::UndefinedTable: ERROR:  missing FROM-clause entry for table 
"submission"
LINE 1: ..."."id" = "agent_activities"."submission_id" WHERE 
"submissio...
                                                         ^
: SELECT "agent_activities".* FROM "agent_activities" INNER JOIN 
"submissions" ON "submissions"."id" = 
"agent_activities"."submission_id" WHERE 
"submission"."Desired_Location" = $1

Ответы [ 2 ]

0 голосов
/ 02 января 2019

У вас есть опечатка в классе Submission

должно быть has_many :agent_activities

0 голосов
/ 02 января 2019

.pluck возвращает массив значений из столбца базы данных.У вас нет AgentActivity столбца в таблице submissions.Вы можете использовать map вместо:

@submissions = Submission.where(:Desired_Location => current_agent.Company_Business_Location).map(&:AgentActivity)

или изменить способ выполнения запроса, используя join:

AgentActivity.joins(:submision).where('submission.Desired_Location' => current_agent.Company_Business_Location)

Вы также можете изменить присвоение имен ассоциации на случай змеиследовать правилам Ruby / Rails:

class Submission < ApplicationRecord
  belongs_to :user, :optional => true

  belongs_to :location, :optional => true

  has_many :agent_activities # instead of :Agent_activities
end

РЕДАКТИРОВАТЬ:

map исправление:

@submissions = Submission.where(:Desired_Location => current_agent.Company_Business_Location).map(&:agent_activity)

join исправление:

AgentActivity.joins(:submision).where('submissions.Desired_Location' => current_agent.Company_Business_Location)
...