尝试在我的应用中创建新的“广告”时出现undefined method
错误。
表格:
<div class="row">
<%= form_for @advertisement do |f| %>
<div class="form-group">
<%= f.label :title %>
<%= f.text_field :title, class: 'form-control', placeholder: "Enter Title " %>
</div>
路线(控制器和型号名称都是单数):
resources :advertisement
rake routes:
advertisement_index GET /advertisement(.:format) advertisement#index
POST /advertisement(.:format) advertisement#create
new_advertisement GET /advertisement/new(.:format) advertisement#new
edit_advertisement GET /advertisement/:id/edit(.:format) advertisement#edit
advertisement GET /advertisement/:id(.:format) advertisement#show
PATCH /advertisement/:id(.:format) advertisement#update
PUT /advertisement/:id(.:format) advertisement#update
DELETE /advertisement/:id(.:format) advertisement#destroy
我收到错误:
undefined method `advertisements_path'
请帮帮我,我已经尝试了一些事情似乎没有任何效果。 提前谢谢!
答案 0 :(得分:1)
控制器名称应为AdvertisementsController
advertisements_controller.rb
路线应为复数...... resources :advertisements
模型应该是Advertisement
advertisement.rb
答案 1 :(得分:0)
好的,如果你想保持单数格式,可以用以下方法设置表格的路径:
<%= form_for @advertisement, url: advertisement_path do |f| %>
Rails中的偏好是让你的控制器复数,所以资源:广告和广告控制器。
正如您已经创建的那样,您可以将资源更改为:
resources :advertisements, :controller => 'advertisement'
这给出了:
advertisements GET /advertisements(.:format) advertisement#index
POST /advertisements(.:format) advertisement#create
new_advertisement GET /advertisements/new(.:format) advertisement#new
所以你现在将指向广告控制器
答案 2 :(得分:0)
拥有一个单一的控制器名称没有错,虽然它通常反对convention:
#config/routes.rb
resources :advertisements, path: "advertisement" #-> url.com/advertisement/new
#config/routes.rb
resources :advertisement, controller: :advertisements #-> url.com/advertisement/new
#config/routes.rb
resource :advertisement #-> url.com/advertisement/new
参考文献:
惯例是将resources
保持为复数,因为它表示HTTP "resources" directive; IE,您advertisements
是多个资源,可以通过发送某些请求来调用。
你遇到的问题是Rails推断出来自对象的路径,所以你会有类似......
<%= form_for @advertisement
... Rails将获取模型名称并创建advertisements_path
的标准路线。
-
使用上述路线应解决问题(除了最上面的路线)。同时明确设置url
的{{1}}也可以:
form
答案 3 :(得分:-1)
尝试
<div class="row">
<%= form_for @advertisement, url: advertisement_index_path do |f| %>
<div class="form-group">
<%= f.label :title %>
<%= f.text_field :title, class: 'form-control', placeholder: "Enter Title" %>
</div>