0

首先,讓我感謝你,如果你花時間看這個。謝謝 :)。我的一個嵌套資源沒有被創建

所以,我終於想出瞭如何在頂部資源的_form.html.erb中正確嵌套資源。我的最終項目從上到下將具有以下嵌套資源:IDF => Switches => Jacks。目前,我所擁有的一切,通過創建一個新的插孔......這給了我下面的錯誤工作起來:

NoMethodError in Jacks#new 

Showing /var/rails/network/app/views/jacks/_form.html.erb where line #1 raised: 

undefined method `model_name' for NilClass:Class 
Extracted source (around line #1): 

1: <%= form_for [@switch, @jack] do |f| %> 
2: <% if @jack.errors.any? %> 
3:  <div id="error_explanation"> 
4:  <h2><%= pluralize(@jack.errors.count, "error") %> prohibited this jack from being saved:</h2> 

我所有的車型都是腳手架,我還沒有觸及他們的許多文件,除模型關聯,控制器修復路線以及_form.html.erb文件。我會發布我認爲相關的代碼,但如果有其他任何可以幫助您的話,那麼請讓我知道。

應用程序/控制器/ jacks_controller.rb:

... 
    def new 
    @jacks = Jack.new(:switch_id => params[:switch_id]) 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render :json => @jack } 
    end 
    end 
... 

應用/視圖/開關/ _form.html.erb:

<%= form_for [@idf, @switch] do |switch_form| %> 
    <% if @switch.errors.any? %> 
     <div id="error_explanation"> 
     <h2><%= pluralize(@switch.errors.count, "error") %> prohibited this switch from being saved:</h2> 

     <ul> 
     <% @switch.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
     <% end %> 
     </ul> 
     </div> 
    <% end %> 

    <div class="field"> 
     <%= switch_form.label :title %><br /> 
     <%= switch_form.text_field :title %> 
    </div> 
    <div class="field"> 
     <%= switch_form.label :model %><br /> 
     <%= switch_form.text_field :model %> 
    </div> 

    <% switch_form.fields_for :jacks do |jack_form| %> 
     <p> 
     <div class="field"> 
      <%= jack_form.label :port, 'Port:' %> 
      <%= jack_form.text_field :port %> 
     </div> 
     <div class="field"> 
      <%= jack_form.label :jack_number, 'Jack Number:' %> 
      <%= jack_form.text_field :jack_number %> 
     </div> 
     <div class="field"> 
      <%= jack_from.label :room_number, 'Room Number:' %> 
      <%= jack_form.text_field :room_number %> 
     </div> 
     <% unless jack_form.object.new_record? %> 
      <div> 
      <%= jack_form.label :_delete, 'Remove:' %> 
      <%= jack_form.check_box :_delete %> 
      </div> 
     <% end %> 
     <p> 
    <% end %> 

    <div class="actions"> 
     <%= switch_form.submit %> 
    </div> 
<% end -%> 

應用/視圖/插孔/ _form.html.erb:

<%= form_for [@jack.switch, @jack] do |f| %> 
    <% if @jack.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@jack.errors.count, "error") %> prohibited this jack from being saved:</h2> 

     <ul> 
     <% @jack.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :port %><br /> 
    <%= f.number_field :port %> 
    </div> 
    <div class="field"> 
    <%= f.label :jack_number %><br /> 
    <%= f.text_field :jack_number %> 
    </div> 
    <div class="field"> 
    <%= f.label :room_number %><br /> 
    <%= f.text_field :room_number %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

我已經嘗試實現從一對夫婦的堆棧溢出類似的問題一些代碼,但似乎沒有任何工作。任何幫助將非常感激。另外,如果您想查看其他代碼,請告訴我。

再次感謝!

回答

1

您是否嘗試從父資源構建@jack對象?即

def new 
    # find Jack's parent 
    parent = JacksParent.find(:parent_id) 
    @jacks = parent.jacks.build(:switch_id => params[:switch_id]) 

    respond_to do |format| 
    format.html # new.html.erb 
    format.json { render :json => @jack } 
    end 
end 
+0

這是一個錯誤的例子或你的實際代碼?在構建對象時有「@jacks」,但在您的json呈現語句中爲「@jack」 – Bryan

+0

是的。這就是我在切換到單線之前的原始狀態。我想你也一樣,但我原本: 開關= Switch.find(PARAMS [:switch_id]) 插孔= switch.jacks.new 我認爲這不是你應該建的地方對象,但我也嘗試過。還是行不通。 –

+0

這絕對是一個錯字。仍然出現錯誤,但這是一個新問題。我會讓你知道,如果我得到它的工作或需要更多的幫助。謝謝! –