NoMethodError в PrzychodyController # создать - PullRequest
0 голосов
/ 23 апреля 2020

Я столкнулся с проблемой при изучении руководства на сайте rails: https://guides.rubyonrails.org/getting_started.html. Мои имена разные, но отчасти я следую инструкциям. На шаге 5.7 я получаю сообщение об ошибке, как в заголовке:

undefined method `przychod_url' for #<PrzychodyController:0x000000000871c980> Did you mean? przychody_url

Это показывает, что проблема в строке:

    redirect_to @przychod

в przychody_controller.rb. Я новичок в RoR и Ruby или программировании в целом. Я не знаю, что является причиной этой проблемы, потому что действие show присутствует и не является закрытым, как в некоторых вопросах, которые я нашел об этой проблеме. Вот мой файл route.rb:

Rails.application.routes.draw do
  get 'welcome/index'

  resources :przychody

  root 'welcome#index'
end

Это файл przychody_controller.rb:

class PrzychodyController < ApplicationController

  def show
    @przychod = Przychod.find(params[:id])
  end

  def new
  end

  def create
    @przychod = Przychod.new(przychod_params)

    @przychod.save
    redirect_to @przychod
  end

  private
    def przychod_params
      params.require(:przychod).permit(:tytul, :tresc, :kwota)
    end
end

А вот что показывает мой рейк-маршрут на тот случай, если что-то с маршрутами:

 Prefix Verb   URI Pattern                                                                              Controller#Action
                        welcome_index GET    /welcome/index(.:format)                                                                 welcome#index
                      przychody_index GET    /przychody(.:format)                                                                     przychody#index
                                      POST   /przychody(.:format)                                                                     przychody#create
                        new_przychody GET    /przychody/new(.:format)                                                                 przychody#new
                       edit_przychody GET    /przychody/:id/edit(.:format)                                                            przychody#edit
                            przychody GET    /przychody/:id(.:format)                                                                 przychody#show
                                      PATCH  /przychody/:id(.:format)                                                                 przychody#update
                                      PUT    /przychody/:id(.:format)                                                                 przychody#update
                                      DELETE /przychody/:id(.:format)                                                                 przychody#destroy
                                 root GET    /                                                                                        welcome#index

Спасибо, что уделили мне время, и я буду очень признателен, если кто-нибудь объяснит мне, что не так и как это исправить, или покажет мне решение.

1 Ответ

1 голос
/ 23 апреля 2020

Это сломано из-за правил множественности рельсов. Rails по умолчанию использует правила множественного числа engli sh, и обходить их болезненно, но возможно.

В вашем случае вы можете указать rails, как перемножить это слово poli sh в коде engli sh.

Узнайте подробности как.

ActiveSupport::Inflector.inflections do |inflect| 
  inflect.irregular('przychod', 'przychody')
end

После этого рельсы узнают, и все подразумеваемые имена, используемые рельсами, должны работать.

'przychod'.pluralize # => "przychody"
'przychody'.singularize # => "przychod"

Другим вариантом было бы не полагаться на rails для выполнения какого-либо множественного числа за вас и всегда очень четко указывать, какой путь вы хотите go.

redirect_to przychody_path(@przychod)

Однако я предлагаю кодирование на английском языке sh вместо того, чтобы заставить рельсы понимать поли sh. Облегчает работу с рельсами.

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