1

新しいデータを作成するための基本的なフォームを作成すると、次のエラーが発生します。送信を押すと、

simple_form_for未定義メソッド`model_name'forNilClass:Class

**_form.html.erb**
<%= simple_form_for(@calls) do |f| %>
  <%= f.error_notification %>
  <%= f.input :caller_name %>
  <%= f.input :caller_phone, hint: "xxx-xxx-xxxx" %>
  <%= f.input :caller_address %>
  <%= f.input :primary_diagnosis %>
  <%= f.error :base %>
  <%= f.button :submit %>
<% end %>

**calls_controller.rb**
def create
     @call = Call.new(params[:call])

     respond_to do |format|
       if @call.save
         format.html { redirect_to @call, notice: 'Call was successfully created.' }
         format.json { render json: @call, status: :created, location: @call }
       else
         format.html { render action: "new" }
         format.json { render json: @call.errors, status: :unprocessable_entity }
       end
     end
   end

**new.html.erb**
<h1>New Call</h1>

<%= render 'form' %>

<%= link_to 'Back', calls_path %>

Railsの命名規則に従って、同じ結果のスキャフォールドでこれを試したので、ここでは少し迷っています。すでにwebrickも再起動しました。ヘルプ?

4

3 に答える 3

5

あなたはsimple_form_for(@calls)

それでもあなたのコントローラーは作成しています@call

変更する必要があります

<%= simple_form_for(@calls) do |f| %>

<%= simple_form_for(@call) do |f| %>
于 2012-05-14T04:55:31.143 に答える
1

コントローラに設定@callしたとすると、パーシャルに渡す必要があると思います。このページのパート3.4.4を参照してください:http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials

タグは次のようになります。

<%= render :partial => "form", :locals => { :calls=> @calls} %>
于 2012-05-14T04:53:42.613 に答える
0

コントローラで「新しい」メソッドを定義する必要があると思います。新しい空のインスタンスを作成して、ビューに戻すだけです。

def new
     @call = Call.new
end

「create」メソッドは、内容を含むフォームを返送するときのPOSTアクションに対する応答です。次に、受け取ったパラメータから新しいインスタンスを作成し、データベースに保存します。

于 2013-08-20T13:16:10.800 に答える