2016-04-20 6 views
1

Ich habe ein range_field, dass innerhalb einer form_for und ich bin mir nicht sicher, wie die Werte korrekt an den Controller und an die Datenbank übergeben werden.Korrektes Format für ein oder mehrere range_field in form_for

Es scheint nicht sehr viele Informationen über Bereich_Feld zu geben, die ich finden konnte. This war die einzige Frage, die ähnlich war, die ich finden konnte.

range_field (object_name, Methode options = {}) public

Ich will es :value, :food_id, :user_id, :vas_question_id in einem neuen vas_answer speichern, wenn ich auf Weiter. Muss ich hidden_field verwenden, um dies zu tun?

Es könnte 1-3 Fragen auf jeder Seite geben. Wäre es besser/einfacher, es als ein Array oder als 3 separate Antworten zu speichern?

Relevante Code Schnitt von meiner aktuellen Ansicht:

<%= form_for @answer do |answer| %> 
    <% @foods.each do |food| %>  # there could be 1, 2, or 3 foods 
    <h4 class="col-md-offset-1 col-md-10" style="font-size: 16px; line-height: 1.6em; clear: both;"><%= @question.prompt_left %> <strong><%= food.name %></strong> <%= @question.prompt_right %></h4> 

    <%= range_field :vas_answers, :value, min: 1, max: 500, step: 1, class: 'not-clicked', :food_id => food.id, :user_id => current_user.id, :vas_question_id => @question.order %> 

    # I saw :user_id => user.id on another question so I tried it, but I don't know what it is really doing 

    <% end %> 
    <%= answer.submit 'Next', :class => 'col-md-offset-9 btn btn-primary btn-surv' %> 
<% end %> 

Controller:

class VasAnswersController < ApplicationController 
    before_filter :authenticate_user! 

    def create 
    @answer = VasAnswer.new(answer_params[:vas_answers]) 
    @q_num = params[:order]  # determine order of questions (not really relevant) 
    @q_num = @q_num.to_i + 1 
    respond_to do |format| 
     if @answer.save 
     if @q_num < 25 
      format.html { redirect_to vas_questions_url(@q_num) } 
     else 
      format.html { redirect_to demographics_path} 
     end 
     end 
    end 
    end 

private 
    def answer_params 
     params.require(:vas_answers).permit(:value, :user_id, :vas_question_id, :food_id) 
    end 
end 

Route:

post "vas_questions/:order" => "vas_answers#create", as: :vas_answers 

Antwort

2

Ich glaube, Sie könnten ein wenig verwirrt in Ihrem Ansatz. Anstatt durch jede Zeile zu gehen und die Fehler zu erklären, würde ich vorschlagen, vielleicht einen anderen Ansatz zu verwenden, der Formulare und verschachtelte Formulare einschließt. Schauen Sie sich die zum Thema Guss Rails:

http://railscasts.com/episodes/196-nested-model-form-part-1

Es ist ein älteres Thema, aber es sollten Sie die Formularstruktur helfen, etwas begradigt. Er hat eine aktualisierte Cast zu diesem Thema, aber man muss Mitglied sein, um es sehen:

http://railscasts.com/episodes/196-nested-model-form-revised

würde ich Ihre Formulare in diesem Muster sagen restrukturieren, und komme wieder mit einer neuen Reihe von Fragen. Beginnen Sie mit der einfachsten Form der Struktur, und lassen Sie sie arbeiten und fügen Sie dann Komplexität hinzu.

Hoffnung, das hilft.

UPDATE: Ich habe Ihren Post auf Reddit gesehen. Die Tatsache, dass Sie als Student in Chico State erscheinen, kann verhindern, dass Menschen "Ihre Hausaufgaben machen" wollen. Ich habe versucht, auf eine Weise zu antworten, die Sie dazu bringt, den Weg von Rails zu lernen, anstatt das Problem für Sie zu lösen.

Verwandte Themen