【问题标题】:Rails new action attempting showRails 新动作尝试秀
【发布时间】:2012-06-16 04:32:48
【问题描述】:

我正在启动一个新的 Rails 3.2.6 应用程序。当我尝试查看新的嵌套表单时,我的嵌套路由失败。我将首先显示错误,然后显示所有涉及的代码。

试图访问的 URL:http://localhost:3000/reports/1/expenses/new

No route matches {:action=>"show", :controller=>"expenses", :report_id=>#<Report id: 1, name: "Test Report", created_at: "2012-06-07 21:58:37", updated_at: "2012-06-07 21:58:37">}

routes.rb

resources :reports do
  resources :expenses
end

expenses_controller.rb

def new
  @report = Report.find(params[:report_id])
  @expense = @report.expenses.new
end

观看次数/费用/new.html.haml

%h1 New Expense
= render 'form'

观看次数/费用/_form.html.haml

= form_for [@report, @expense] do |f|

这是我试图点击的链接:

= link_to 'New Expense', new_report_expense_path(@report)

当我明确调用新操作时,我无法弄清楚为什么它会尝试访问显示操作。

耙式路线

report_expenses     GET    /reports/:report_id/expenses(.:format)          expenses#index
                    POST   /reports/:report_id/expenses(.:format)          expenses#create
new_report_expense  GET    /reports/:report_id/expenses/new(.:format)      expenses#new
edit_report_expense GET    /reports/:report_id/expenses/:id/edit(.:format) expenses#edit
report_expense      GET    /reports/:report_id/expenses/:id(.:format)      expenses#show
                    PUT    /reports/:report_id/expenses/:id(.:format)      expenses#update
                    DELETE /reports/:report_id/expenses/:id(.:format)      expenses#destroy
        reports     GET    /reports(.:format)                              reports#index
                    POST   /reports(.:format)                              reports#create
     new_report     GET    /reports/new(.:format)                          reports#new
    edit_report     GET    /reports/:id/edit(.:format)                     reports#edit
         report     GET    /reports/:id(.:format)                          reports#show
                    PUT    /reports/:id(.:format)                          reports#update
                    DELETE /reports/:id(.:format)                          reports#destroy
           root            /                                               reports#index

更新 GitHub 仓库链接:https://github.com/ardavis/expense_report

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 routes


    【解决方案1】:

    错误在views/expences/_form.html.haml,最后一行

          = link_to 'Cancel', report_expense_path(@report), class: 'btn'
    

    你可能是说

          = link_to 'Cancel', report_path(@report), class: 'btn'
    

    【讨论】:

    • 这是一个很好的例子,说明 Rails 堆栈跟踪比看起来更有用。在错误消息附近会有一个文件名和行号,它们会将您指向这一行,而不是您认为错误的那一行
    • 哇,非常感谢。你在哪里看到堆栈跟踪?我看到的唯一错误是“路由错误”,它下面没有任何东西可以查看跟踪。随意克隆回购并尝试自己。我不确定我应该使用什么方法来追踪它。
    • 出现此类错误,Rails 不会在浏览器中显示跟踪,仅在服务器控制台中显示。不知道为什么。
    【解决方案2】:

    你有没有尝试过路线:

    map.resources :reports do |report|
        report.resources :expenses
    end
    

    【讨论】:

    • 啊,那也错了……据我所知,你做得对。
    【解决方案3】:

    您需要在链接中添加@report.id 而不是@report

    link_to 'New Expense', new_report_expense_path(@report.id)
    

    【讨论】:

    • 尽管我希望这是解决方案,但事实并非如此。我以前做过这个,我知道它没有必要。我已经尝试过你的解决方案,它给出了完全相同的错误,完全没有区别。
    • 该死。对于那个很抱歉。我只是不明白为什么整个对象都试图传递 id。但我想这很正常,rails 会从中选择 id。
    • 您是否尝试过添加接受 :id 作为参数的自定义路由?也许匹配 "/expenses/new/:id" => "expenses#new"
    • 好的,然后删除了..我想不通。祝你好运!
    • @Abram 回应“为什么整个对象都试图传递 id”——Rails 对对象使用“to_param”,然后返回“id”。如果你想创建友好的 url,大多数时候你只需要在模型中覆盖这个方法
    猜你喜欢
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多