Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails新动作演示_Ruby On Rails_Ruby On Rails 3_Routes - Fatal编程技术网

Ruby on rails Rails新动作演示

Ruby on rails Rails新动作演示,ruby-on-rails,ruby-on-rails-3,routes,Ruby On Rails,Ruby On Rails 3,Routes,我正在启动一个新的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:

我正在启动一个新的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">}
费用_controller.rb

resources :reports do
  resources :expenses
end
def new
  @report = Report.find(params[:report_id])
  @expense = @report.expenses.new
end
views/expenses/new.html.haml

%h1 New Expense
= render 'form'
= form_for [@report, @expense] do |f|
视图/费用/_form.html.haml

%h1 New Expense
= render 'form'
= form_for [@report, @expense] do |f|
这是我尝试单击的链接:

= link_to 'New Expense', new_report_expense_path(@report)
当我显式调用新动作时,我不明白为什么它试图访问show动作

耙路径

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 repo的链接:

您需要在链接中放置@report.id而不是@report

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

您需要在链接中放置@report.id而不是@report

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

您是否尝试过以下路线:

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

您是否尝试过以下路线:

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

错误出现在views/expenses/_form.html.haml的最后一行

      = link_to 'Cancel', report_expense_path(@report), class: 'btn'
你可能是说

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

错误出现在views/expenses/_form.html.haml的最后一行

      = link_to 'Cancel', report_expense_path(@report), class: 'btn'
你可能是说

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

尽管我希望这是解决办法,但事实并非如此。我以前做过,我知道不需要。我尝试了你的解决方案,它给出了完全相同的错误,一点区别都没有。很抱歉。我只是不明白为什么整个对象都试图传递id。但我想这很正常,rails从中选择id。您是否尝试添加一个接受:id作为参数的自定义路由?可能匹配“/expenses/new/:id”=>“expenses#new”确定,然后删除该项。。我想不出来。祝你好运@Abram回应“为什么整个对象都试图传递id”-Rails在对象上使用“to_param”,然后返回“id”。如果你想创建友好的URL,大多数时候你只需要在模型中重写这个方法,就像我希望这是解决方案一样,事实并非如此。我以前做过,我知道不需要。我尝试了你的解决方案,它给出了完全相同的错误,一点区别都没有。很抱歉。我只是不明白为什么整个对象都试图传递id。但我想这很正常,rails从中选择id。您是否尝试添加一个接受:id作为参数的自定义路由?可能匹配“/expenses/new/:id”=>“expenses#new”确定,然后删除该项。。我想不出来。祝你好运@Abram回应“为什么整个对象都试图传递id”-Rails在对象上使用“to_param”,然后返回“id”。如果您想创建友好的URL,大多数时候您只需要在modelsAh nm中重写此方法,这也是错误的。。据我所知,你做得对。啊,嗯,那也是错的。。据我所知,你做得很对。这是一个很好的例子,说明Rails堆栈跟踪比看起来有用得多。在错误消息附近会有一个文件名和行号,它会将您指向这一行,而不是您认为错误的那一行哇,非常感谢。但是你在哪里看到堆栈跟踪?我看到的唯一错误是“路由错误”,下面没有任何东西可以查看跟踪。请随意克隆回购协议并自己尝试。我不确定应该使用什么方法来跟踪它。如果出现这种错误,Rails不会在浏览器中显示跟踪,只会在服务器控制台中显示。不知道为什么。这是一个很好的例子,说明Rails堆栈跟踪比它看起来有用得多。在错误消息附近会有一个文件名和行号,它会将您指向这一行,而不是您认为错误的那一行哇,非常感谢。但是你在哪里看到堆栈跟踪?我看到的唯一错误是“路由错误”,下面没有任何东西可以查看跟踪。请随意克隆回购协议并自己尝试。我不确定应该使用什么方法来跟踪它。如果出现这种错误,Rails不会在浏览器中显示跟踪,只会在服务器控制台中显示。不知道为什么。