0

我有一個事件模型和事件內部的Q + A模型。Rails深入嵌套資源替代訪問參數

我新的軌道所以不知道是否有這樣做

眼下,事件show.html.erb,我既有一種形式張貼問題中的另一種方法,而每個問題都會有一個當您創建,它正在通過EventQuestionsController路由我show.html.erb內部的問題,我通過PARAMS訪問事項標識的形式張貼解答

的路線,如今

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參數,因爲你的代碼應該能夠爲你確定它。看到我的答案,以瞭解我指的是什麼。 – kobaltz 2014-11-22 04:47:57

+0

我添加了我的'event_questions_controller',讓你知道我之前做了什麼。我打算用我的event_answers_controller做類似的事情。我試圖圍繞我的表單尋找我的event_answers。另外,我將如何訪問我的'create'中的變量。我能像你所做的那樣做同樣的事嗎? 你可以忽略奇怪的東西B/C我沒有使用這個項目的SQL DB。 – Clam 2014-11-22 05:49:38

回答

0

在一些幫助下,我從一些kobaltz答案和其他一些幫助中推導出了這個答案。

的替代方法將把信息隱藏字段,並把它傳遞給控制器​​

<%= @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

你不應該需要直接訪問參數來創建你的n ested記錄。例如,如果你的event#new行動,你可能有類似

@event = Event.new 

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

這將創建一個新的事件,並帶你到新的一頁。在你的New頁面中,你應該有嵌套字段來創建和更新嵌套模型。

在表格中,您可以使用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 %> 

我一般喜歡做嵌套協會時使用的部分,但如果你想保持它所有在一個文件中(見下文),它會看起來是這樣的。

<%= 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 %> 

在你show動作,你可能有這樣的事情

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

從這裏,你有三個實例變量分配,並能夠訪問相關記錄您的事件和問題。

+0

我已經添加了一些表單示例和控制器信息。我不明白的是..如果我的路線沒有嵌套,我如何獲得事件ID等?當我發佈到「創建」行動 – Clam 2014-11-22 06:01:08