Techioz Blog

Rubyでネストされたルートを持つクラスのshowアクションを呼び出す方法は何ですか?

概要

ネストされたルートで show アクションを呼び出す do ブロックをどのように定義または作成しますか?

ネストされたルートで show アクションを呼び出す do ブロックをどのように定義または作成しますか?

求人を掲載するすべての企業にショーアクションを呼びかけることを検討しています。

ジョブインデックスコントローラー

def index
    @companies = Company.all
    @jobs = Job.all.order("created_at ASC")
end

ジョブショーコントローラー

def show
    @company = Company.find(params[:company_id])
    @job = @company.jobs.find(params[:id])
  end

ルート

resources :companies do
    resources :jobs
end

鉄道路線

company_job GET    /companies/:company_id/jobs/:id(.:format)                  jobs#show

企業モデル

has_many :jobs, dependent: :destroy

ジョブモデル

belongs_to :company, optional: true

現在のジョブインデックスページのブロックを実行します

<% @companies.jobs.each do |job| %>
   <%= link_to company_jobs_path(@company) %> #show action trying to call for the company posting the job
<% end %>

解決策

ここにはいくつかの問題があります。

まず、company_jobs_path は、show アクションではなく、index アクションです。 company_job_path は、表示アクション ヘルパーです。

次に、link_to の最初の引数は、href ではなく、リンクのテキストである必要があります。

したがって、ネストされたルートの場合は、ブロック内で会社と仕事の両方を指定する必要があります。

link_to "Some text", company_job_path(@company, job)

編集:実際、ブロックラッパーに@companyの代わりに@companiesがあることに気づきました。したがって、それも修正する必要があります。