未定义的方法“_s_path”错误
undefined method `_s_path' error
尝试在我的应用程序中创建新的 "ad" 时出现 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 路线:
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'
请帮帮我,我已经尝试了一些方法,但似乎没有任何效果。
提前致谢!
尝试
<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>
控制器名称应该是复数... AdvertisementsController
in advertisements_controller.rb
路由应该是复数...resources :advertisements
模型应该是单数的... Advertisement
in advertisement.rb
好的,如果你想保留单数的格式,你可以设置表格的路径:
<%= form_for @advertisement, url: advertisement_path do |f| %>
Rails 中的偏好是使您的控制器复数,因此资源 :advertisements 和 AdvertismentsController。
因为您已经创建了它,您可以将资源更改为:
resources :advertisements, :controller => 'advertisement'
这给出:
advertisements GET /advertisements(.:format) advertisement#index
POST /advertisements(.:format) advertisement#create
new_advertisement GET /advertisements/new(.:format) advertisement#new
所以你现在将指向广告控制器
有一个单一的控制器名称没有错,虽然它通常反对 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
.
的标准路线
--
使用上述路线应该可以解决问题(除了最上面的那个)。还明确设置 form
的 url
将起作用:
<%= form_for @advertisement, url: advertisement_path do |f| %>
尝试在我的应用程序中创建新的 "ad" 时出现 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 路线:
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'
请帮帮我,我已经尝试了一些方法,但似乎没有任何效果。 提前致谢!
尝试
<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>
控制器名称应该是复数... AdvertisementsController
in advertisements_controller.rb
路由应该是复数...resources :advertisements
模型应该是单数的... Advertisement
in advertisement.rb
好的,如果你想保留单数的格式,你可以设置表格的路径:
<%= form_for @advertisement, url: advertisement_path do |f| %>
Rails 中的偏好是使您的控制器复数,因此资源 :advertisements 和 AdvertismentsController。
因为您已经创建了它,您可以将资源更改为:
resources :advertisements, :controller => 'advertisement'
这给出:
advertisements GET /advertisements(.:format) advertisement#index
POST /advertisements(.:format) advertisement#create
new_advertisement GET /advertisements/new(.:format) advertisement#new
所以你现在将指向广告控制器
有一个单一的控制器名称没有错,虽然它通常反对 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
.
--
使用上述路线应该可以解决问题(除了最上面的那个)。还明确设置 form
的 url
将起作用:
<%= form_for @advertisement, url: advertisement_path do |f| %>