Я создаю простое приложение для сокращения URL. В модели у меня есть метод, который создает short_url для использования вместо исходного URL.
class ShortenersController < ApplicationController
before_action :find_shortener, only: [:info, :show]
before_action :generate_unigue_shorty, only: [:create]
def new
@shortener = Shortener.new
end
def create
@shortener = Shortener.new
@shortener.main_url = params[:main_url]
if @shortener.save
redirect_to info_path(@shortener.short_url)
else
flash[:notice] = "Someting went wrong"
render 'new'
end
end
private
def shortener_params
params.require(:shortener).permit(:main_url, :short_url)
end
def find_shortener
@shortener = Shortener.find_by_short_url(params[:short_url])
end
end
Модель:
class Shortener < ApplicationRecord
before_create :generate_unique_shorty
def generate_unique_shorty
shorty = SecureRandom.hex(4)
if Shortener.all.any? {|a| a.short_url == shorty}
self.generate_unique_shorty
else
self.short_url = shorty
end
end
end
Ошибка, которую я получаю:
undefined метод `generate_unigue_shorty 'для #ShortenersController: 0x00007fbfbc735db0 Похоже, что объект self в этом методе установлен как объект Controller, и это должен быть экземпляр класса Shortener (@shortener)