0

モデルのインスタンスを作成する単純なフォームを作成しましたが、何らかの理由でコントローラーで create メソッドを呼び出していません。フォームコードは次のとおりです。

<% @house.mates.each do |mate| %>
    <p><%= mate.name %></p>
<% end %>

<h2>Add a new mate:</h2>
<%= form_for @mate do |f| %> 
    <p><%= f.label "Name" %>
       <%= f.text_field :name %>
       <%= f.hidden_field :house_id %>
   </p>
   <%= f.submit "Submit", :action => :create %>
<% end %>

コントローラーのコードは次のとおりです。

class MatesController < ApplicationController

  def new 
    @mate = Mate.new
  end

  def create 
    @mate = Mate.new(params[:mate])
    @mate.save
    redirect_to house_path(current_house)
  end

end

Mate モデルと House モデルの間には多対 1 の関係があります... 私は Rails にかなり慣れていませんが、同様の形式で他のアプリを作成しましたが、これまでにこの問題が発生したことはありません。コンソールで Mate オブジェクトを作成して保存できますが、エラーは発生していないため、何らかの理由でコントローラー メソッドが呼び出されていないようです。どんな助けでも大歓迎です!

4

1 に答える 1

0

実際、他に問題がなければ、@mate オブジェクトを作成する必要があります。コードで @mate を家に関連付けていないため、家のページでは表示されません。

あなたのフォームでは を参照:house_idしましたが、フォームをレンダリングするとき、この属性は nil です。

その理由は、コントローラーに割り当てていないためです。

コントローラーでは@mate、house オブジェクトから初期化して、house_id を内部に持つ必要があります

def new
  @house = something
  @mate  = @house.mates.new  # Instead of Mate.new
end
于 2013-07-01T04:37:32.890 に答える