Как получить все вакансии для текущего пользователя и просмотреть каждую работу - PullRequest
0 голосов
/ 11 мая 2018

Требуются недостающие ключи [: id] для дочерней ассоциации show path

У меня есть модель работы, которая принадлежит пользователю.На странице показа пользователя я вызываю все дочерние задания, которые принадлежат пользователю.Вот мой код:

<% current_user.jobs.each do |j| %>
  <%= j.id %>
  <%= j.job_category %> 
  <%= link_to 'show', job_path(j.id) %> <br> <br>
<% end %>

Но возникает ошибка всякий раз, когда я нажимаю на страницу показа заданий:

Не найдено ни одного маршрута {: action => "show",: controller=> "jobs",: id => nil,: user_id => "1"} отсутствуют необходимые ключи: [: id]

Пожалуйста, как мне исправить эту ошибку?маршруты показывают, что ресурсы рабочих мест стоят самостоятельно с путем: job_path.это работает, когда я вручную подключаю URL.

Вот мои маршруты.rb:

resources :users do
  resources :jobs
  resources :applications
end

resources :jobs do 
  collection do
    match 'search' => 'jobs#search', via: [:get, :post], as: :search
  end 
end 

и мой код контроллера:

class JobsController < ApplicationController

  def index
    @q = Job.ransack(params[:q])
      @jobs = @q.result(distinct: true)
  end 

  def frontpage
    @q = Job.ransack(params[:q])
      if params[:q].present?
        redirect_to jobs_path(@q)
      end
    @jobs = Job.all
  end 

  def search
    index
    render :index
  end

  def show
    @job = Job.find(params[:id])
  end


  def edit 
  end

  def update
    @joblists.update(joblists_params)
    redirect_to joblists_path
  end 

  def create 
    @user = User.find(params[:user_id]) 
    @user_job = @user.jobs.create(joblists_params)
    flash[:notice] = "Job has been successfully Created"
    redirect_to user_path(@user)
  end 

  def joblists_params
    params.require(:job).permit(:job_category, :job_title, :company_name, :location, :job_description,
      :monthly_salary, :deadline, :contact, :longitude, :lattitude, :full_time ) 
  end

end 

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Посмотрите после запуска rails routes, оно выглядит примерно так

user_job GET    /users/:user_id/jobs/:id(.:format)        jobs#show

, поэтому путь ссылки

user_job_path

по этой ссылке, вам нужно передать user_id и заданиеid тогда ему понравится

<%= link_to 'show', user_job_path(@user, j.id) %> # or @user.id

Решено после чата

<% current_user.jobs.each do |j| %> 
    <%= j.id %> 
    <%= j.job_category %> 
    <%= link_to 'show', user_job_path(current_user.id, j.id) %> <br><br> 
<% end %>
0 голосов
/ 11 мая 2018

Добавить идентификатор пользователя

user_job_path(current_user.id, j.id)

Спасибо за комментарий

...