2016-05-19 6 views
-1

Ich versuche, eine App zu erstellen, in der wir Fragen stellen können und eine Frage viele Antworten haben. Also habe ich hier eine Eins-zu-viele-Assoziation verwendet. Jetzt habe ich zwei Modelle Frage Antwort und zwei Controller Fragen & Antworten. Ich habe ein Formular in den \ Fragen \ show.html.erbErstellen eines neuen Datensatzes in One-to-Many-Beziehung in Ruby auf Schienen

<%= form_for @answer, :url => "answer", :method => 'post' do |f| %> 
    <%= f.hidden_field :question_id, :value => @question.id %> #this i am not sure about 
    <%= f.text_area :content %> 
    <%= f.submit "SUBMIT" %> 
<% end %> 

Die Show-Methode in der Steuerung ist:

def show 
    @question = Question.find(params[:id]) 
    @answers = @question.answers 
    @answer = Answer.new 
    end 

ich auch Methode anlegen erstellt

eine Route zu Antworten Controller
post 'questions/show/answer' => "answers#create" 

Jetzt ist das Problem, dass die question_id als Zeichenfolge übergeben wird, aber ich möchte es als Ganzzahl übergeben, so dass ich es der aktuellen Frage zuordnen kann. Wie kann ich das tun, oder gibt es einen anderen Weg?

Antwort

0

Verwenden new Aktion in Ihrem Controller ein neues Objekt der Antwort auf Ihre Form, dann in create Aktion, finden Sie die Frage, die Sie unter ihm die Antwort beantworten und erstellen möchten zu machen. Wie so:

def new 
    @answer = Answer.new 
end 

def create 
    @question = Question.find(params[:id]) 
    @question_created = @question.answers.create(answers_params).save 

    if @question_created 
    // do something or redirect somewhere 
    end 
end 

private 

def answers_params 
    params.require(:answer).permit(:content) 
end 

Dann in Ihren Routen können Sie Ressourcen verwenden, um RESTful Routen zu erstellen benötigten

resources :questions do 
    resources :answers 
end 

(Hinweis: Jede Aktion sollte für den spezifischen erforderlichen Zweck verwendet werden, außer in Fällen Wenn Sie AJAX-Aufrufe machen möchten, um ein Formular in der Show-Aktion zu erhalten)

+0

Ich habe das Formular in der Ansicht eines anderen Controllers laufen, dh; mein form_for (@answer) ist in Fragen show.html.erb Ansicht des Controllers .. betrifft das den Code, den Sie mir gerade gegeben haben –

+0

Es sollte nicht. Probieren Sie die Create-Aktion im Antwort-Controller mit dem oben angegebenen Code aus. – Fiyin

Verwandte Themen