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があることに気づきました。したがって、それも修正する必要があります。