0

まず、これを見て時間を割いてくれてありがとう。ありがとう :)。

そのため、最終的に、最上位のリソースの _form.html.erb にリソースを適切にネストする方法を見つけました。私の最終的なプロジェクトには、上から下に次のネストされたリソースがあります: IDFs => スイッチ => ジャック。現在、新しいジャックを作成することですべてが機能しています...次のエラーが表示されます:

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 ファイルを除いて、それらのファイルの多くには触れていません。関連すると思われるコードを投稿しますが、それを見た場合に私を助けるのに役立つ何かが他にある場合は、お知らせください.

app/controllers/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 -%>

app/views/jacks/_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 %>

スタック オーバーフローに関するいくつかの同様の質問からいくつかのコードを実装しようとしましたが、何も機能していないようです。どんな助けでも大歓迎です。また、他に見たいコードがあれば教えてください。

再度、感謝します!

4

1 に答える 1

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
于 2012-06-27T18:34:24.040 に答える