рельсы неопределенный метод на форме - PullRequest
0 голосов
/ 04 мая 2020

у меня есть модели User и Gallery

user has many gallies и gallery belongs to User

модели:

class User < ApplicationRecord
   has_many :galleries
end

class Gallery < ApplicationRecord
  has_many_attached :files
  belongs_to :user
end

на моем контроллере:

class GalleryController < ApplicationController

  def new
    @gallery = Gallery.new
  end

end

и затем на gallery/new.html.haml:

.container
  %h4
    New Gallery
  %div
    = form_for @gallery do |f|
      .form-group
        = f.label :title, class: 'col-md-2 col-form-label'

тогда, когда я go на localhost: 3000 / галерея / новый, он сказал:

undefined method `galleries_path' for #<#<Class:0x00007f9f4e865908>:0x00007f9f4ae31b10>
Did you mean?  gallery_path

но когда я приказываю это for_for и меняю его на какое-то текстовое слово Hellow, страница была просто в порядке, я что-то упустил здесь?

Я использую ruby 2.7.1 и последние Rails full error here

маршруты:

                      gallery_index GET    /gallery(.:format)                                                                       gallery#index
                                      POST   /gallery(.:format)                                                                       gallery#create
                          new_gallery GET    /gallery/new(.:format)                                                                   gallery#new
                         edit_gallery GET    /gallery/:id/edit(.:format)                                                              gallery#edit
                              gallery GET    /gallery/:id(.:format)                                                                   gallery#show
                                      PATCH  /gallery/:id(.:format)                                                                   gallery#update
                                      PUT    /gallery/:id(.:format)                                                                   gallery#update
                                      DELETE /gallery/:id(.:format)                                                                   gallery#destroy

1 Ответ

4 голосов
/ 04 мая 2020

Проблема в том, что вы позвонили resources :gallery, а не resources :galleries. Это приводит к неправильным маршрутам:

                  gallery_index GET    /gallery(.:format)  gallery#index

Аргументом resources всегда должна быть форма множественного числа.

# config/routes.rb
Rails.application.routes.draw do
  resources :galleries
end

                           Prefix Verb   URI Pattern                                                                              Controller#Action
                        galleries GET    /galleries(.:format)                                                                     galleries#index
                                  POST   /galleries(.:format)                                                                     galleries#create
                      new_gallery GET    /galleries/new(.:format)                                                                 galleries#new
                     edit_gallery GET    /galleries/:id/edit(.:format)                                                            galleries#edit
                          gallery GET    /galleries/:id(.:format)                                                                 galleries#show
                                  PATCH  /galleries/:id(.:format)                                                                 galleries#update
                                  PUT    /galleries/:id(.:format)                                                                 galleries#update
                                  DELETE /galleries/:id(.:format)                                                                 galleries#destroy

Имя вашего контроллера также должно быть множественным :

# app/controllers/galleries_controller.rb
class GalleriesController < ApplicationController
  # GET /galleries/new
  def new
    @gallery = Gallery.new
  end
end

Как и в папке представлений:

$ mv app/views/gallery app/views/galleries 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...