0

이벤트 내에 이벤트 모델과 Q + A 모델이 있습니다. 내가 거기에 이벤트 show.html.erb, 내가 질문을 게시하는 양식 모두를 내부에, 지금이매개 변수에 액세스하는 대신 리소스가 많이 중첩 된 레일

을 할 수있는 다른 방법, 그리고 각 질문이있을 것인지 확신하지 레일에 새로 온 사람

당신이 내 show.html.erb 내부의 질문은 EventQuestionsController를 통해 라우팅되는 것을 작성하고 내가 PARAMS 통해 EVENT_ID에 액세스 할 때 형식은

라우트 지금

resources :events do 
    resources :event_questions, only: [:create, :destroy] 
    end 

이 권리처럼 앉아 답변을 게시합니다. event_answer과 같은 방식으로해야합니까?

그리고 내 말은 event_questions 안에 event_answers를 중첩해야한다는 것입니다. event_id와 event_question_id를 알아야합니다.

이것이 매개 변수에 액세스하는 유일한 방법 인 경우. 이게 보이겠습니까?

resources :events do 
    resources :event_questions, only: [:create, :destroy] do 
     resources :event_answers, only: [:create, :destroy] 
    end 
    end 

event_questions_controller.rb

def create 
    @event_question = EventQuestion.new(event_question_params) 
    if @event_question.save 
     event = Event.find(params[:event_id]) 
     @event_question.event = event 
     redirect_to event 
    else 
     redirect_to :back 
    end 
end 

show.html.erb

<%= form_for(@event_question, :url => event_event_questions_path(@event)) do |f| %> 
# form stuff 
<% end %> 

나는 당신이 필요가 없습니다이

<%= @event.event_questions.each do |q| %> 
    <%= q.question %> 
    <%= q.fields_for :answers do |a| %> 
     <%= a.label :answer %> 
     <%= a.text_field :answer %> 
     <%= a.submit "Answer" %> 
    <% end %> 
<% end %> 
+0

에 전달된다 도움을 받기가 어렵다. 그러나 코드에서 ID 매개 변수를 직접 결정할 수 있어야하므로 id 매개 변수에 직접 액세스 할 필요가 없습니다. 내가 말하는 것에 대한 아이디어를 얻으려면 아래의 내 답변을 참조하십시오. – kobaltz

+0

이전에 내가 한 일에 대한 아이디어를주기 위해'event_questions_controller'를 추가했습니다. 내 event_answers_controller와 비슷한 것을하려고했습니다. 양식에서 내 event_answers를 찾는 방법에 대해 머리를 감싸려고합니다. 또한 어떻게'create' 변수에 접근 할 수 있습니까? 내가 보여준 것과 똑같은 일을 할 수 있습니까? 이상한 물건을 무시할 수 있습니다.이 프로젝트에서는 SQL DB를 사용하지 않습니다. – Clam

답변

0

약간의 도움으로 코발트 대답과 다른 도움에서이 답변을 얻었습니다.

대체 방법은, 당신의 컨트롤러와 뷰의 관련 부분을 보지 않고, 당신을 도울 수있는 대답을 게시가 있습니다 숨겨진 필드에 정보를 넣고 컨트롤러

<%= @event.event_questions.each do |q| %> 
     <%= q.question %><br> 
     <% q.event_answers.each do |a| %> 
      <%= a.answer %> 
     <% end %> 
     <%= form_for(EventAnswer.new) do |f| %> 
      <%= hidden_field_tag :event_question_id, q.id %> 
      <%= hidden_field_tag :event_id, @event.id %> 
      <%= f.label :answer %> 
      <%= f.text_field :answer %> 
      <%= f.submit "Answer" %> 
     <% end %> 
    <% end %> 
1

에 내 대답 양식을 변화 시작 params에 직접 액세스하여 n을 만들 수 있습니다. ested records. 예를 들어, event#new 행동, 당신은 새로운 이벤트를 생성하고 새 페이지로 이동합니다

@event = Event.new 

3.times do 
    question = @event.questions.build 
    5.times do 
    question.answers.build 
    end 
end 

이 같은 것을 할 수 있습니다. 새 페이지에서 중첩 된 필드를 만들어 중첩 된 모델을 만들고 업데이트해야합니다.

양식에서 fields_for을 사용하여 event 레코드에 연결된 모델의 레코드에 액세스 할 수 있습니다. new 액션 사례에서 우리는 3 가지 질문을하고 있으며 각 질문에는 5 가지 대답이 있습니다.

<%= simple_form_for @event do |f| %> 
    <%= f.input :attribute1 %> 
    <%= f.input :attribute2 %> 
    <%= f.fields_for :questions do |builder| %> 
    <%= render 'questions', f: builder %> 
    <% end%> 
<% end %> 

나는 일반적으로 중첩 된 연결을 수행 할 때 일부를 사용하려면,하지만 당신은 (아래 참조) 하나 개의 파일에 모든 것을 유지하기를 원한다면, 그것은 것 같이 보입니다. 당신의 show 행동

<%= simple_form_for @event do |f| %> 
    <%= f.input :attribute1 %> 
    <%= f.input :attribute2 %> 
    <%= f.fields_for :questions do |q| %> 
    <%= q.input :question_text %> 
    <%= q.fields_for :answers do |a| %> 
     <%= a.input :answer_text %> 
    <% end %> 
    <% end%> 
<% end %> 

, 여기에서이

@event = Event.find(params[:id]) 
@questions = @event.questions 
@answers = @question.answers if @questions 

같은 것을 할 수 있습니다, 당신은 세 개의 인스턴스 변수가 할당하고 이벤트 및 질문에 대한 관련 기록에 액세스 할 수 있습니다.

+0

몇 가지 양식 예제와 컨트롤러 정보를 추가했습니다. 내가 이해할 수없는 것은 .. 내 경로가 중첩되어 있지 않다면, 어떻게 이벤트 ID 등을 얻을 수 있습니까? 'create' 액션에 게시 할 때 – Clam

관련 문제