index.html:
<% @partners.each do |j| %>
<% if j.link == nil %>
<div class="column_left"><%= j.name %></div>
<% else %>
<div class="column_left"><%= image_tag("#{j.link}") %></div>
<% end %>
<div class="column_right"><%= j.description %></div>
<%if logged_in? %>
<%= button_to "-", j, :method => :destroy , data: { confirm: "Sind Sie sich sicher, dass sie den Partner #{j.name} löschen wollen?" } %>
<% end %>
controller:
def delete
Partner.find(partner_params).destroy_all
redirect_to partner_path, notice: "#Eintrag wurde gelöscht!"
end
def addPartner
@partner = Partner.new(partner_params)
if !Partner.exists?(:name => partner_params[:name])
uploaded_io = params[:partner][:logo]
File.open(Rails.root.join('app', 'assets', 'images', 'partner', uploaded_io.original_filename), 'wb') do |file|
file.write(uploaded_io.read)
@partner[:link] = "partner/#{uploaded_io.original_filename}"
params[:partner].delete :logo
@partner.save
redirect_to partner_path, notice: "#{@partner.name} wurde modifiziert!"
end
else
@partner = Partner.where(:name => partner_params[:name])
if @partner.update_all(partner_params)
flash[:notice] = "#{@partner.name} wurde geändert!"
end
end
end
private
def partner_params
params.require(:partner).permit(:name, :link, :description)
end
routes.rb:
Rails.application.routes.draw do
get '/login' => 'sessions#new'
post '/login' => 'sessions#create'
delete '/logout' => 'sessions#destroy'
resources :users
get '/home' => 'main#home'
get '/impressum' => 'main#impressum'
post '/impressum' => 'main#updateImpressumById'
get '/partner' => 'partner#index'
post '/partner' => 'partner#addPartner'
delete '/partner' => 'partner#delete'
get '/jobs' => 'jobs#index'
post '/jobs' => 'jobs#index'
get '/kontakt' => 'contacts#new'
post '/home' => 'main#updateText'
get '/referenzen' => 'reference#index'
post '/referenzen' => 'reference#index'
resources "contacts", only: [:new, :create]
I want to delete an entry from my database by clicking on a button. But there must be a conflict with the "private_params". I always got this problem:
param is missing or the value is empty: partner
I searched for similiar problems, but nothing seems to fit really.
Thanks for the help Gabbar, but now I found the solution on my own. Was a pretty stupid one. I called
method: destroy
but it must be: method: delete
otherwise the wrong path is chosen.
Then the routes.rb need to be: delete '/partner' => 'partner#delete'