如何定义或编写 do 块来调用具有嵌套路由的 show 操作?
收到“Jobs#index 中的 NoMethodError”,其中
<% @companies.jobs.each do |job| %>
引发未定义的方法 `jobs' for #<Company::ActiveRecord_Relation:0x00007fa4d2085e70>
希望为每家发布职位的公司采取行动。
作业索引控制器
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
是索引操作,而不是显示操作。 company_job_path
是显示动作助手。
其次,
link_to
的第一个参数必须是链接的文本,而不是href
。
因此,对于嵌套路线,您需要提供公司和工作,因此在您的区块中只需:
link_to "Some text", company_job_path(@company, job)
编辑:实际上,只是注意到你的块包装中有
@companies
而不是 @company
。所以你也需要解决这个问题。