2016-06-27 10 views
0

Ich benutze das wahrscheinlich falsch und ich kann es nicht herausfinden.options_for_select on simple_form

Ich verwende ein options_for_select auf meinem simple_form. Es wird ohne Fehler gerendert, aber die ausgewählte Option wird nicht in der Datenbank gespeichert. Alle anderen Felder speichern keine Probleme.

Die select_tag ist

<%= select_tag :experiment_type, options_for_select(['AOV', 'Conversion']), :prompt => "Select a Project Type" %> 

Controller:

class ExperimentsController < ApplicationController 
    before_action :find_advertiser 
    before_action :find_experiment, only: [:edit, :update, :show, :destroy] 


    def index 
     @experiments = Experiment.all.order("created_at DESC") 
    end 

    def show 

    end 

    def new 
     @experiment = Experiment.new 
     @advertisers = Advertiser.all.map{ |c| [c.name, c.id] } 

    end 

    def create 
     @experiment = Experiment.new(experiment_params) 
     @experiment.advertiser_id = params[:advertiser_id] 

     if @experiment.save 
      redirect_to advertiser_path(@advertiser) 
     else 
      render 'new' 
     end 
    end 

    def edit 
      @projects = Project.all.map{ |c| [c.name, c.id] } 
    end 

    def update 
     @experiment.advertiser_id = params[:id]  
     if @experiment.update(experiment_params) 
      redirect_to experiment_path(@experiment) 
     else 
      render 'edit' 
     end 
    end 

    def destroy 
     @experiment.destroy 
     redirect_to root_path 
    end 

private 

    def experiment_params 
     params.require(:experiment).permit(:advertiser_id, :name, :experiment_type, :hypothesis, :priority, :status, :launch_date, 
      :description, :baseline_url, :test_url, :baseline_aov_60, :baseline_aov_30, :baseline_aov_mtd, 
      :baseline_conversion_60, :baseline_conversion_30, :baseline_conversion_mtd) 
    end 

    def find_advertiser 
     @advertiser = Advertiser.find(params[:advertiser_id]) 
    end 

    def find_experiment 
     @experiment = Experiment.find(params[:id]) 
    end 
end 
+0

Geben Sie Ihren Controller-Code –

+0

Ok, jetzt ist dieses Problem für erstellen? Aktualisieren? Beide? Zeigen Sie auch Ihre Modellstruktur. Irgendwelche Fehler in der Konsole oder im Protokoll? –

+0

Können Sie den Fehler, den Sie erhalten, posten? Haben Sie den Datentyp in den Migrationen für "experiment_type" korrekt festgelegt? – Lahiru

Antwort

1

Ich würde Ihre volle Form Layout müssen Sie sicher sagen, aber Ihr experiment_params Verfahren nach ist experiment_type Bereich ein Teil des Experiments . Wenn Sie jedoch nur select_tag verwenden, ist es nicht mit Ihrem Hauptobjekt verbunden. Sie müssen nur select verwenden. Ähnlich wie folgt aus:

<%= simple_form_for :experiment do |f| %> 
... 
<%= f.select ... %> 
... 
<% end %> 

oder in der simple_form format:

<%= f.input :experiment_type, collection: ['AOV', 'Conversion'] %> 

Meine Vermutung auch auf dem Hash-basiert:

"experiment_type" => "AOV", "Experiment" => {"name" => "Test" ....

Der experiment_type ist außerhalb Ihres "Experiments".

+0

Wahoo! Das war's. Ich denke also, ich muss auf Select vs select_tag nachlesen, um die Unterschiede zu verstehen. Vielen Dank für Ihre Hilfe! –

+0

@LeoLendre: Willkommen! Dann schätze ich, dass du meine Antwort akzeptieren kannst. –

+0

@LeoLegendre: Weißt du, wie man Antworten akzeptiert?Unter jeder Antwort auf ** Ihre ** Frage haben Sie ein leeres Häkchen, das Sie anklicken können, um eine Antwort zu akzeptieren. –

Verwandte Themen