2011-06-18 16 views
7

Przeszedłem tonę formularza_do zagnieżdżonych pytań dotyczących zasobów i nie mogę uzyskać żadnego rozwiązania, które zadziała. Pomyślałem, że nadszedł czas, aby zadać spersonalizowane pytanie.Formularz dla zasobu zagnieżdżonego

Mam dwa modele, zadania i pytania, oferty pracy ma wiele pytań i pytań należą do pracy.

Użyłem rusztowania do utworzenia kontrolerów i modeli, a następnie zagnieździłem zasoby w routes.rb.

root :to => "pages#home" 

resources :jobs do 
    resources :questions 
end 

get "pages/home" 
get "pages/about" 
get "pages/contact" 


class Job < ActiveRecord::Base 
    has_many :questions 
end 

class Question < ActiveRecord::Base 
    belongs_to :job 
end 

Teraz usiłuję dostępu '/ Praca/1/pytania/nowy' i zachować coraz

NoMethodError w pytaniach trafić New

Zacząłem błędu Brak dopasowania route {: controller => „pytania”} gdy kod był

<%= form_for(@question) do |f| %> 

wiem, że to źle, więc zacząłem próbować inne kombinacje i żaden z nich pracował.

Próbowałem

<%= form_for([@job.questions.build ]) do |f| %> 

że

<%= form_for([@job, @job.questions.build ]) do |f| %> 

tym

<%= form_for(@job, @question) do |f| %> 

Wśród kilka innych kombinacjach i że nie działają.

Oto link do moich tras kasę: git clone https://gist.github.com/1032734

Każda pomoc jest mile widziana i daj mi znać, jeśli potrzebujesz więcej informacji, dzięki.

Odpowiedz

12

prostu przekazać URL jako dodatkowa opcja:

<%= form_for(@question, :url => job_questions_path(@job)) do %> 

EDIT:

Spróbuj także:

form_for([@job, @question]) 
+0

Pierwszy opcja zadziałała, dziękuję! - co robi przekazanie adresu URL, który to rozwiązuje? Również job_id dla pytania nie aktualizuje się w DB - jakiś pomysł, jak to naprawić? FYI: edycja zwróciła ten błąd: żadna trasa nie pasuje do {: kontrolera => "pytań"} – Igrabes

+0

Gdy nie przełączysz opcji ': url', Railsy spróbują ją samodzielnie rozwiązać. Nie wie, że 'Pytanie' jest zawsze pod-zasobem' Job', ponieważ nie zawsze musi być. Jeśli chodzi o "job_id", który nie jest aktualizowany, jeśli używasz przypisania masy, prawdopodobnie go ignorujesz. Wywołaj 'question.job = new_job' osobno. Nie widzę jednak twojego kodu. – d11wtq

+0

Hej @ d11wtq, nie jestem całkowicie pewien, co masz na myśli przez Call question.job = new_job - gdzie to się dzieje? Oto moje repo [link (https://github.com/igrabes/InterQ), jeśli to pomaga. – Igrabes

2

To jak ja rozwiązać kopalni :)

W swoim questions/_form.html.erb

<%= form_for [@job, @question] do %> 

Do tego potrzebny jest identyfikator zadania. miniesz go w następujący sposób: W questions_controller.rb

def new 
    @job = Job.find(params[job_id]) 
    @question = @job.questions.build 
end 

produkcji (.build) jest podobny do korzystania z nowych (.new) w kodzie powyżej, z różnicami tylko w starszych wersjach systemu szyn; szyny 2 w dół.

Teraz do akcji create (nadal w questions_controller.rb)

def create 
    @job = Job.find(params[:job_id]) 
    @question = @job.questions.build(question_params) 
end 

Jeśli używasz tylko tych, job_id i pole user_id w modelu zapytania będzie pusta. Aby dodać identyfikatory, to zrobić: W swojej questions_controller.rb doda job_id do job_params tak:

def question_params 
    params.require(:question).permit(:ahaa, :ohoo, :job_id) 
end 

Następnie przekazać identyfikator użytkownika (jeśli używasz opracować), wykonaj:

def create 
    @job = Job.find(params[:job_id]) 
    @question = @job.questions.build(question_params) 
    @question.user_id = current_user.id 
end 
Powiązane problemy