Rails动态link_to' s

时间:2014-08-06 20:51:38

标签: ruby-on-rails controller link-to

我有一个视图,其中包含以下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在视图页面上工作?

基本上,我从数据库中提取项目,然后尝试使用数据库项创建指向相应视图的链接。

有什么想法吗?

3 个答案:

答案 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) %>