Я бы посоветовал вам выполнить рефакторинг вашего кода следующим образом ..
Вы можете принять к сведению set_url в приват, чтобы предотвратить повторение кодов
class UrlsController < ApplicationController
before_action :set_url, only: [:show, :edit, :update, :destroy]
def new
@url = Url.new
end
def edit
end
def create
@url = Url.new(url_params)
if @url.save
flash[:success] = Your url was successfully published!]
redirect_to @url
else
render :new
end
end
def update
if @url.update(url_params)
flash[:success] = Your url was successfully updated!]
redirect_to @url
else
render :edit
end
end
private
def set_url
@url = Url.find(params[:id])
end
def url_params
params.require(:url).permit(:title, :link)
end
end
new. html. erb
<h1>New Form</h1>
<%= render 'form', url: @url%>
_form.html.erb
<%= form_for @url do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= f.label :link %>
<%= f.text_field :link%>
<%= f.submit %>
<% end %>
rout.rb
resources :urls
Если вы будете использовать devise для аутентификации, вы можете проверить документацию devise.