【问题标题】:Rails dynamic link_to'sRails 动态链接到的
【发布时间】:2014-08-06 20:51:37
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    你有

    <%= link_to job.id, job %>
    

    这里的第二个选项指定您的 url 或路径助手。 您收到此错误是因为您的路线没有 job_path 助手

    要检查所有 url 或路径助手,请在终端中搜索路由。它会为您提供类似于

    的输出
    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 是您在控制器操作中定义的 Customer 模型的实例变量(因为您在视图中使用它)。控制器操作中定义的实例变量自动可用于其视图。详情请阅读docs

    【讨论】:

    • customer_job_path(@customer, job)
    • @TiagoFarias 实际上会是工作:)
    • @TiagoFarias 在使用 customer_job_path(@customer, @job) 时,我没有得到任何路线匹配,它说我缺少必需的键 [:id]。我猜这是因为我没有在控制器中初始化客户或工作?
    • @TiagoFarias - Tiago 再次获胜!非常感谢。
    • @DustinJames 很高兴我能帮上忙
    【解决方案2】:

    你可以使用浅层资源

    resources :customers, shallow: true do
      resources :jobs
    end
    

    然后使用job_path url 助手:

    <%= link_to job.id job_path(job) %>
    

    【讨论】:

      【解决方案3】:

      运行

      搜索路线

      你可能会发现路由实际上类似于customer_job_path

      要使用此功能,您需要将 link_to 更改为

        <%= link_to job.id, customer_job_path(@customer, job) %>
      

      【讨论】:

      • 这完全正确并且有效 - 我可以问一个学习问题 - @customer 中包含哪些信息,在这种情况下它来自哪里?
      • 不用担心,在这种情况下,@customer 是在(我假设)您的客户控制器显示方法中定义的。很可能会是类似@customer = Customer.find params[:id] 的东西,它会根据花药link_to customer.id, customer 传入的 id 找到您单击的客户模型 一个很好的试验方法是使用 gem 调用 pry gem 'pry' 这是一个很棒的调试工具,让你可以通过控制台跳转到代码,无论你输入binding.pry 所以总之@customer 包含一个客户模型
      • @DustinJames 更新了我的答案以获得一些解释。
      • @ob264 感谢宝石推荐和解释,这有帮助。
      猜你喜欢
      • 2010-11-28
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      相关资源
      最近更新 更多