Problem z zapisaniem - undefined method `each' for "24":String

Mam problem mianowicie przy próbie zapisu konkretnego markera do confday dostaje następujący błąd

undefined method `each' for "24":String

w POST mam

{"utf8"=>"✓", "authenticity_token"=>"uQjbqDTQ2hnkXV5jNVnqI9SEqAdx9q5Um7h2g2n3cEpzieIsF2PR5khkbzDXwu+KE7zKi6bGxSoiB91n3C/jGQ==", "confday"=>{"header"=>"fdg", "description"=>"fdg", "date"=>"gdf", "timefrom"=>"", "timeto"=>""}, "markers"=>{"id"=>"24"}, "commit"=>"Create Confday", "controller"=>"confdays", "action"=>"create"}

więc idzie ten parametr nie widzieć czemu “czepia” się each’a w controllerze który w create wygląda tak

  def create
      
      @confday = Confday.new(confday_params)

      params[:markers][:id].each do |marker|
        if !marker.empty? 
            @confday.confmarkers.build(:marker_id => marker)
        end  
      end 

    respond_to do |format|
      if @confday.save
        format.html { redirect_to @confday, notice: 'Confday was successfully created.' }
        format.json { render :show, status: :created, location: @confday }
      else
        format.html { render :new }
        format.json { render json: @confday.errors, status: :unprocessable_entity }
      end
    end
  end

relacja wygląda tak że dla confday

  has_many :confmarkers
  has_many :markers, :through => :confmarkers

dla markers

has_many :confmarkers
has_many :confdays, :through => :confmarkers

anyone?

params[:markers][:id] to jest u ciebie string, w tym przypadku 24. I Ruby Ci wprost napisał, nie można iterować po stringu (tak jak można po np. tablicy)

Wytala się dokładnie tu: params[:markers][:id].each prubujesz tu iterować po zawartości parametru id w którym to się kryje 24.

dzięki, czyli czego powinienem użyć? (i dlaczego :slight_smile: )

Napisz w prostych słowach co chcesz zrobić (co tym kodem chciałeś osiągnąć) i jaki to kontroler, bo nie do końca jestem pewien co próbowałeś osiągnąć.

idea jest taka że (ok może nazwa jest myląca) ale confday to element agendy (wydarzenie w agendzie) i teraz to wydarzenie ma marker a marker oznacza miejsce czyli np. Aula A

Moją intencją jest dodanie confday’a z konkretnym markerem

Zakładam że markers powinno być tablicą różnych ID’eków, tak wynika z tego
confday has_many :markers, :through => :confmarkers
Ale chyba nie jest, bo parametrach masz słowinik (w rubym to się chyba hash nazywa) zamiast tablicy

W wersji z tym słownikiem z jednym ID

    if !params[:markers][:id].empty?
      @confday.confmarkers.build(:marker_id => params[:markers][:id])
    end  

W wersji gdzie markers to tabla słownikiuw czyli np.:
markers"=>[ {"id"=>"24"}, {"id"=>"12"} ]

    params[:markers].each do |marker|
      if !marker[:id].empty? 
        @confday.confmarkers.build(:marker_id => marker[:id])
      end  
    end 

Chyba o to Ci chodziło, nie wiem czy zadziałą, bo nie mam za bardzo jak sprawdzić na twoim kodzie :smile: