我有一个视图,其中包含以下ruby代码,我想用它在我的应用程序中创建动态链接:
<% @customer.jobs.each do |job| %>
<%= link_to job.id, job %>
<% end %>
这会为job_path抛出一个未定义的方法错误,这是有道理的,因为我的jobs_controller show方法是空的:
def show
end
以下是我的路线:
resources :customers do
resources :jobs
end
我的问题是 - 如何在控制器中设置方法以使我的link_to在视图页面上工作?
基本上,我从数据库中提取项目,然后尝试使用数据库项创建指向相应视图的链接。
有什么想法吗?
答案 0 :(得分:5)
你有
<%= link_to job.id, job %>
此处第二个选项指定您的网址或路径帮助程序。 您收到此错误,因为您的路线没有job_path助手
要检查所有网址或路径助手,请在终端中搜索路由。它会为您提供类似
的输出Prefix Verb URI Pattern Controller#Action
customer_job GET /customers/:customer_id/jobs/:id(.:format) jobs#show
请用
替换您的链接<%= link_to job.id, customer_job_path(@customer,job) %>
<强>更新强>
参考您的评论:
@customer是您的客户模型的实例变量,您可以在控制器操作中定义该变量(因为您在视图中使用它)。控制器操作中定义的实例变量可自动用于其视图。有关详细信息,请阅读docs
答案 1 :(得分:2)
您可以使用浅层资源
resources :customers, shallow: true do
resources :jobs
end
然后使用job_path
网址助手:
<%= link_to job.id job_path(job) %>
答案 2 :(得分:1)
运行
rake routes
您可能会发现该路线实际上类似于customer_job_path
要使用此功能,您需要将link_to更改为
<%= link_to job.id, customer_job_path(@customer, job) %>