У меня есть две связанные модели: работа и кандидат.Модель кандидата обновляется, когда пользователь подает заявку на список вакансий с помощью нового представления кандидатов.Поскольку я связал кандидата с моделью задания, я не могу сохранить новые экземпляры кандидата.Я знаю, что должен передать job_id в качестве параметра, чтобы любой новый экземпляр Candidate ссылался на конкретное задание, но я просто не могу понять, что я делаю неправильно.Кроме того, модель задания связана с моделью пользователя разработки, но кандидат не связан с моделью пользователя.Может ли это быть проблемой?Заранее спасибо.
Я попробовал массу вещей в моем контроллере кандидатов, но теперь я вернул его к тому, что было до того, как я связал модель кандидата с моделью задания, чтобы я мог начать все сначала.снова, как будто я только что запустил миграцию в AddJobToCandidate
candid_controller.rb
class CandidatesController < ApplicationController
def index
@candidates = Candidate.all
end
def new
@candidate = Candidate.new
render layout: false
end
def single
@candidate = Candidate.find(params[:id])
end
def create
@candidate = Candidate.new(candidate_params)
if @candidate.save
redirect_to root_path
else
render "new"
end
end
private
def candidate_params
params.require(:candidate)
.permit(:first_name, :last_name, :email, :cover_letter, :ph, :job_id)
end
end
views /андидатам / new.html.erb
<h1>Work at <%= current_user.company %></h1>
<%= simple_form_for @candidate do |form| %>
<%= form.input :first_name, label: "First Name" %>
<%= form.input :last_name, label: "Last Name" %>
<%= form.input :email, label: "Email" %>
<%= form.input :cover_letter, label: "Cover Letter" %>
<%= form.input :ph, label: "Phone Number" %>
<%= form.button :submit %>
<% end %>
rout.rb
Rails.application.routes.draw do
get 'candidates/index'
get 'candidates/new/:id' => 'candidates#new', :as => 'apply'
get 'candidates/single/:id' => 'candidates#single', :as => 'viewcandidate'
get 'jobs/index'
get 'jobs/new'
get 'jobs/listing/:id' => 'jobs#listing', as: 'listing'
get 'jobs/listings', :as => 'careerpage'
get 'jobs/dashboard'
get 'jobs/single/:id' => 'jobs#single', :as => 'viewjob'
devise_for :users, controllers: { sessions: "users/sessions" }
resources :candidates
resources :jobs
root 'jobs#dashboard'
end
views / jobs / list.html.erb единственное представление, которое ссылается наандидаты / new.html / erb
<h1><%= @job.title %></h1>
<p><%= @job.description %></p>
<p><%= link_to "Apply", apply_path(@job.id) %></p>
Миграция кандидатов / ассоциаций вакансий
class AddJobToCandidate < ActiveRecord::Migration[5.2]
def change
add_reference :candidates, :job, foreign_key: true
end
end
jobs_controller.rb (не думаю, что это необходимо, но я все равно включу)
class JobsController < ApplicationController
before_action :authenticate_user!
def index
@jobs = current_user.jobs.all
end
def dashboard
end
def new
@job = Job.new
end
def listing
@job = Job.find(params[:id])
render layout: false
end
def listings
@jobs = current_user.jobs.all
render layout: false
end
def single
@job = Job.find(params[:id])
@candidates = Candidate.all
end
def create
@job = current_user.jobs.new(job_params)
if @job.save
redirect_to jobs_index_path
else
render "new"
end
end
private
def job_params
params.require(:job)
.permit(:title, :description, :url, :user_id)
end
end
Ошибка не отображается, но модель не обновляется.
Одна из вещей, которые я пробовал в действии candid_controller #create, была:
def create
@candidate = @job.candidates.create(candidate_params)
if @candidate.save
redirect_to root_path
else
render "new"
end
end
, и я получаю сообщение об ошибке: «неопределенный метод,« кандидаты »на nil: NilClass '
Еще одна вещь, которую я попробовал, - добавить эту строку в действие #create:
@job = Job.find(params[:id])
, и я получаю ошибку «Не могу найти работу без идентификатора»