Я работаю на доске объявлений, чтобы изучать / практиковать рельсы.У меня есть отдельное представление для каждой категории вакансий, и я хочу, чтобы пользователь мог щелкнуть по публикации определенного задания, чтобы получить доступ к другому представлению со всеми деталями списка.Я частично разобрался с маршрутизацией, так как я могу перейти к localhost: 3000 / jobs / list / 7, например, чтобы посмотреть представление для id: 7.У меня возникла проблема со ссылкой на / перечисление /: id из представления категории моей работы, и я могу получить доступ к представлению только для определенного идентификатора, введя его в адресную строку.Я работал над этим в течение нескольких дней и проверил много связанных вопросов здесь, но, похоже, не могу понять это.Я полагаю, что упускаю из виду простую, но критическую деталь, так как я не очень разбираюсь в рельсах.
Вот мой взгляд на категорию работы:
<div class="cat-banner" id="developer">
<h1>Human Resources Jobs</h1>
<h4 class="listing-count"><%= Job.where(:category => 'Human Resources').count.to_s + ' Listings' %></h4>
</div>
<div class="category-page">
<!-- Full-Stack Developer Jobs -->
<div class="jobs-posted">
<hr class="other-line">
<% if Job.where(:category => 'Human Resources').count > 0 %>
<% @jobs.each do |job| %>
<div class="job">
<% if job.category == "Human Resources" %>
<span class="job-logo"><%= image_tag('salesforce.png', :size => "60x40") %></span>
<span id="line-align"><p class="title"><%= link_to job.title, listing_path(@job) %> </p>
<p class="name"><%= job.name %></p></span>
<% if job.location == "Remote" %>
<span class="remote-tag"><%= job.location.upcase %></span>
<% else %>
<p class="location"><%= job.location %></p>
<% end %>
<p class="kind"><%= job.kind %></p>
<p class="time-stamp"><%= job.created_at.strftime("%A, %B %d %Y") %></p>
<hr class="line">
<% end %>
</div>
<% end %>
<% else %>
<p>There are no human resources jobs at the moment...</p>
<p style="text-decoration: underline;"><%= link_to 'Post a Human Resources Job Here', new_job_path %></p>
<% end %>
</div>
<!-- End of Human Resources Jobs -->
</div>
И мой route.rbfile:
Rails.application.routes.draw do
get 'subscribers' => 'subscribers#index'
get 'jobs/remote' => 'jobs#remote'
get 'jobs/listing/:id' => 'jobs#listing', as: 'listing'
get 'jobs/company' => 'jobs#company'
get 'jobs/dev' => 'jobs#dev'
get 'jobs/design' => 'jobs#design'
get 'jobs/marketing' => 'jobs#marketing'
get 'jobs/ai' => 'jobs#ai'
get 'jobs/fullstack' => 'jobs#fullstack'
get 'jobs/frontend' => 'jobs#frontend'
get 'jobs/backend' => 'jobs#backend'
get 'jobs/it' => 'jobs#it'
get 'jobs/software' => 'jobs#software'
get 'jobs/product' => 'jobs#product'
get 'jobs/cloud' => 'jobs#cloud'
get 'jobs/mobile' => 'jobs#mobile'
get 'jobs/database' => 'jobs#database'
get 'jobs/datascience' => 'jobs#datascience'
get 'jobs/blockchain' => 'jobs#blockchain'
get 'jobs/security' => 'jobs#security'
get 'jobs/support' => 'jobs#support'
get 'jobs/network' => 'jobs#network'
get 'jobs/finance' => 'jobs#finance'
get 'jobs/sales' => 'jobs#sales'
get 'jobs/hr' => 'jobs#hr'
get 'jobs/businessdev' => 'jobs#businessdev'
resources :jobs
root 'jobs#index'
get 'jobs/index'
get 'jobs/new'
И часть контроллера заданий:
class JobsController < ApplicationController
def index
@jobs = Job.all
@subscribers = Subscriber.all
end
def new
@job = Job.new
end
def listing
@job = Job.find(params[:id])
end
def show
@job = Job.find(params[:id])
end
def create
@job = Job.new(params.require(:job).permit(:title, :url, :category, :kind, :location, :description, :name, :summary, :website, :email, :companyDescription, :headquarters ))
if @job.save
redirect_to root_path
else
render "new"
end
respond_to :html, :json
end
Я пробовал:
<%= link_to job.title, listing_path(@job) %>
<%= link_to job.title, listing_path(@job.id) %>
<%= link_to job.title, listing_path(@job[:id]) %>
<%= link_to job.title, listing_path %>
и другие варианты, которые, как я думал, будут работатьчтение StackOverflow
Я полагаю, что моя проблема связана с этим оператором link_to (неправильный синтаксис?), так как все выглядит нормально в моем контроллере заданий и файле маршрутов.
Я либо получаю: Нет совпадений маршрутов {:action => "list",: controller => "jobs",: id => nil}, отсутствуют обязательные ключи: [: id],
или
неопределенный метод `id 'дляnil: NilClass,
или
неопределенный метод `[] 'для nil: NilClass
Ошибка« отсутствуют обязательные ключи: [: id] »меня смущает.Я проверил много ресурсов, пытаясь выяснить, как передать: id, но не могу решить.
Это мой первый пост здесь, и я ДЕЙСТВИТЕЛЬНО благодарен за любую помощь и с нетерпением жду, чтобы стать достаточно знающимв будущем, поэтому я тоже могу отвечать на вопросы.
рейк-маршруты