ActiveRecord :: AssociationTypeMismatch в контроллере # Ошибка создания в моем проекте - PullRequest
0 голосов
/ 03 февраля 2019

Могу ли я получить некоторую помощь с моим кодом, который выбрасывает ActiveRecord::AssociationTypeMistach в моем творении JobsController #.

ActiveRecord::AssociationTypeMismatch (JobCategory(#70843392) expected, got "At Home" which is an instance of String(#20478408)):    
app/controllers/jobs_controller.rb:46:in `create'

Я отправляю данные через форму

<%= form_for @job do |f| %>
  <div class="row">
    <div class="col-md-4 select">
      <div class="form-group">
        <label>Job Category</label>
        <%= f.collection_select :job_category, JobCategory.order(:job_category),
          :job_category, :job_category, include_blank: false, id: "job_category",
          prompt: "Select...", class: "form-control" %>
      </div>
    </div>

    <div class="col-md-4 select">
      <div class="form-group">
        <label>Job Type</label>
        <%= f.grouped_collection_select :job_type, JobCategory.order(:job_category),
          :job_types, :job_category, :job_type_id, :job_type, id: "job_type",
          prompt: "Select...", class: "form-control"    %>
      </div>
    </div>

    <div class="col-md-4 select">
      <div class="form-group">
        <label>Frequency</label>
        <%= f.select :recurrence, [["One Off", "One Off"], ["Daily", "Daily"],
          ["Weekly", "Weekly"], ["Bi-Monthly", "Bi-Monthly"],
          ["Once-Monthly", "Once-Monthly"]],
          id: "recurrence", prompt: "Select...", class: "form-control" %>
      </div>
    </div>
  </div>

  <div><%= f.submit "Post My Job", class: "btn btn-normal" %></div>
<% end %>

Схема для модели работы

  create_table "jobs", primary_key: "job_id", force: :cascade do |t|
    t.string "job_title"
    t.text "job_description"
    t.text "key_instructions"
    t.integer "budget"
    t.datetime "booking_date"
    t.string "recurrence"
    t.boolean "is_flexible"
    t.string "address"
    t.boolean "active"
    t.integer "user_id"
    t.datetime "date_posted"
    t.datetime "date_ending"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.boolean "featured"
    t.boolean "premium"
    t.integer "job_category_id"
    t.integer "job_type_id"
    t.string "job_category"
    t.string "job_type"
    t.index ["job_category_id"], name: "index_jobs_on_job_category_id"
    t.index ["job_type_id"], name: "index_jobs_on_job_type_id"
    t.index ["user_id"], name: "index_jobs_on_user_id"
  end

Я отправляю данные из моей формы на мою работу.модель rb, но в процессе с использованием моделей job_category.rb и ассоциаций job_type.rb для получения дополнительной информации.Три модели связаны следующим образом:

class Job < ApplicationRecord
  belongs_to :user
  belongs_to :job_category
  belongs_to :job_type
  has_many_attached :images

  validates :job_category, presence: true
  validates :job_type, presence: true
  validates :recurrence, presence: true    
end

class JobType < ApplicationRecord
  has_many :job_categories
  has_many :jobs

  #attr_accessible :job_type
  #validates :job_type, :presence => true
end

class JobCategory < ApplicationRecord
  has_many :job_types
  has_many :jobs

  #attr_accessible :job_category
  #validates :job_category, :presence => true    
end

Любые советы о том, где я иду не так, были бы полезны.Спасибо

1 Ответ

0 голосов
/ 03 февраля 2019

Исходя из того, что у вас есть в вашем вопросе, у вас есть два варианта для категорий вакансий (которые должны применяться также к типам работ): 1) Вы можете создать таблицу job_categories и удалить job_category_id и * 1003.* из таблицы jobs.2) Более простой вариант, и тот, который я мог бы порекомендовать, основываясь на очень небольшом количестве знаний, кроме того, что вы, кажется, относительно новый для проектирования БД и Rails, состоит в том, чтобы полностью избавиться от класса JobCategory и избавиться от * 1006.*.Вы также можете удалить job_category_id из таблицы jobs.Если вы сделаете это, остальная часть нашего кода выглядит так, как будто он должен быть почти готов к работе.

Установленные вами ассоциации и дополнительные классы действительно предназначены для случаев, когда вы храните эти дополнительные данные вотдельные таблицы, и вы рассказываете ActiveRecord, как эти данные связаны.Здесь, поскольку задание имеет только одну категорию, которая на самом деле представляет собой единственную строку без дополнительных данных, размещение всего в одной таблице - неплохой вариант.

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