未定义的方法“_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.

的标准路线

--

使用上述路线应该可以解决问题(除了最上面的那个)。还明确设置 formurl 将起作用:

<%= form_for @advertisement, url: advertisement_path do |f| %>