Param is missing or the value is empty

czesc, nie wiem jak rozwiazac ten problem, mam taki komunikat

ActionController::ParameterMissing in ArtykulsController#utworz
param is missing or the value is empty: artykuly

def artykuly_parametry
params.require(:artykuly).permit(:nazwa, :pozycja, :widoczny, :created_at, :strona_id, :zdjecie)

end

moj kontroler wyglada tak:
class ArtykulsController < ApplicationController

def index
@artykuly = Artykul.sortuj
end

def nowa

@artykuly=Artykul.new({:nazwa=>"Tytuł?"})
@strona=Strona.order('pozycja ASC')
@licznik=Artykul.count + 1

end

def utworz

@artykuly =Artykul.new(artykuly_parametry)
if @artykuly.save
  flash[:notice] = "Artykuł został utworzony"
  redirect_to(:action=>'index')
else
  @licznik = Artykul.count +1
  @strona = Strona.order('pozycja ASC')
  render('nowa')

end

end
def artykuly_parametry

params.require(:artykuly).permit(:nazwa, :pozycja, :widoczny, :created_at, :strona_id, :zdjecie)

end
end

a to moj form.html.erb:

<%= blad(@artykuly) %>

<tr>
	<th><%= pole.label(:strona_id, "Strona") %></th>
	<td><%= pole.select(:strona_id, @strona.map{|t| [t.nazwa, t.id]}, :class=>'form-control') %></td>
</tr>

<tr>
	<th><%= pole.label(:nazwa) %></th>
	<td><%= pole.text_field(:nazwa, :class=>'form-control') %></td>

</tr>
	<tr>
	<th><%= pole.label(:pozycja) %></th>
	<td><%= pole.select(:pozycja, 1..@licznik, :class=>'form-control') %></td>

</tr>
	<tr>
	<th><%= pole.label(:widoczny, "Czy jest widoczny?") %></th>
	<td><%= pole.check_box(:widoczny) %></td>
</tr>
<tr>
	<th><%= pole.label(:zdjecie, "Zdjęcie") %></th>
	<td><%= pole.file_field(:zdjecie) %></td>

</tr>
	
<tr>
	<th><%= pole.label(:created_at, "Utworzony") %></th>
	<td><%= pole.datetime_select(:created_at, :class=>'form-control') %></td>
</tr>

Brakuje parametru artykuly w twojej formie - powinieneś mieć coś takiego:
<%= form_with(model: artykuly, local: true) do |form| %>.
<%= blad(@artykuly) %> - tego nie rozumiem, coś źle wkleiłeś, czy tylko tyle masz w pliku form?

to jest moja forma:

<%= blad(@artykuly) %>

table class=“table table-striper”>

<tr>
	<th><%= pole.label(:strona_id, "Strona") %></th>
	<td><%= pole.select(:strona_id, @strona.map{|t| [t.nazwa, t.id]}, :class=>'form-control') %></td>
</tr>

<tr>
	<th><%= pole.label(:nazwa) %></th>
	<td><%= pole.text_field(:nazwa, :class=>'form-control') %></td>

</tr>
	<tr>
	<th><%= pole.label(:pozycja) %></th>
	<td><%= pole.select(:pozycja, 1..@licznik, :class=>'form-control') %></td>

</tr>
	<tr>
	<th><%= pole.label(:widoczny, "Czy jest widoczny?") %></th>
	<td><%= pole.check_box(:widoczny) %></td>
</tr>
<tr>
	<th><%= pole.label(:zdjecie, "Zdjęcie") %></th>
	<td><%= pole.file_field(:zdjecie) %></td>

</tr>
	
<tr>
	<th><%= pole.label(:created_at, "Utworzony") %></th>
	<td><%= pole.datetime_select(:created_at, :class=>'form-control') %></td>
</tr>

Zamiast params.require(:artykuly) powinno być raczej params.require(:artykul). Zdecyduj się na angielskie nazwy, bo Rails automatycznie tworzy liczbę mnogą po angielsku, czyli najczęściej przez dodanie -s na końcu. “ArtykulsController” wygląda idiotycznie, a do tego połapanie się w takiej mieszaninie polsko-angielskiej jest trudne. Już nie mówiąc o tym, że ogólnoświatowym językiem, w jakim pisze się kod, jest angielski.

2 Likes

Następnym razem zrobie to calkowicie w jez. ang. Jednak teraz chcialbym dokonczyc ten projekt. Niestety to nie problem z ta nazwa.

http://guides.rubyonrails.org/form_helpers.html - zobacz jak powinna wyglądać forma. Twoja jest bardzo dziwna - co według Ciebie ma robić <%= blad(@artykuly) %> - masz metodę ‘blad’ w kontrolerze? Albo pole.label itp. - nie masz nigdzie zdefiniowanego pola, więc nie wiem skąd się tam wzięło.
Jeśli jakimś cudem pokazuje Ci się forma kiedy tworzysz nowy artykuł, to sprawdź w terminalu co się dzieje jak klikniesz wyślij czy zapisz. Powinno być coś takiego:" Started POST “/artykuly” […] Parameters: {“utf8”=>“✓”, “authenticity_token”=>"…", “artykuly”=>{“nazwa”=>"…"} "
Jeśli to nie pomoże to wrzuć cały projekt na github czy co tam chcesz i podaj linka.

1 Like

forma pokazuje się, blad wystepuje kiedy chce utworzyc artykul.

ta metoda <%= blad(@artykuly) %> jest w widok/dodatki/_bledy.html.erb (tam jest szablon tej metody ktora wyswietla bledy) i jest przekazana do folderu helpers/ Application_helper.rb

<% if objekt && objekt.errors.size > 0 %>
div class = “bg-danger”>
table class=“table”>
tr class = “danger”>

Wystąpiły błędy podczas zapisu rekordu do bazy danych, ilość błędów: <%=objekt.errors.size %>
dla następujących pół:
% objekt.errors.full_messages.each do |komunikat| %>
tr class=“warning”>
td><%= komunikat %>
/tr>
<% end %>
/table>

<%end%>

a to znajduje sie w Application_helper

def blad(objekt)
render(:partial=>‘dodatki/bledy’, :locals=>{:objekt=>objekt})
end

Wrzucam link na githuba:

Sprawdzałeś jakie parametry, w ogóle lecą w requeście? Konsola? Przeglądarka?

Poza tym to powinno być chyba w ten deseń:

private

def artykuly_parametry
params.require(:artykul).permit(:nazwa, :pozycja, :widoczny, :created_at, :strona_id, :zdjecie)
end

:artykul a nie :artykuly

Sprawdź tez w źródle htmla jakie nazwy pól zostały wygenerowane, dla pola “nazwa” powinno być name=“artykul[nazwa]” i analogicznie dla pozostałych