0

:name(英語で申し訳ありません)と:dateparamsを使用して新しいレコードをアップロードしたい場合は、次のようになります。

コントローラ:

  class ActorController < ApplicationController
    def index
    end

    def new
      @actor = Actors.create
    end

    def create
      @actor = Actors.create(params[:actors])
      if @actor.save
        redirect_to actor_path, :notice => "Your actor was saved."
      else
        render "new"
      end
    end
  end

モデル:(actors.rb)

  class Actors < ActiveRecord::Base 
    attr_accessible :birth, :name
  end

そしてビュー:(new.html.erb)

<%= form_for(@actor) do |a| %>
  <%= a.text_field :name %>
  <%= a.text_field :birth %>
  <%= a.submit %>
<% end %>

そして、ローカルサーバーコンソールでの私の出力は次のとおりです。

Started PUT "/actor/40" for 127.0.0.1 at 2013-03-27 13:38:15 +0100
Processing by ActorController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"BKhrP1Rfkco7r05wPT758M3CHQXRP5l5jcul77oTLPw=", "actors"=>{"name"=>"Bunny", "birth"=>"19/21/21"}, "commit"=>"Update Actors", "id"=>"40"}
   (1.2ms)  begin transaction
  SQL (0.7ms)  INSERT INTO "actors" ("birth", "created_at", "name", "updated_at") VALUES (?, ?, ?, ?)  [["birth", nil], ["created_at", Wed, 27 Mar 2013 12:38:15 UTC +00:00], ["name", nil], ["updated_at", Wed, 27 Mar 2013 12:38:15 UTC +00:00]]
   (197.8ms)  commit transaction
   (0.2ms)  begin transaction
   (0.1ms)  commit transaction
Redirected to http://localhost:3000/actor/40
Completed 302 Found in 209ms (ActiveRecord: 200.0ms)
4

5 に答える 5

3

以下を編集してください。

1)モデルを編集します。

class Actor < ActiveRecord::Base  # Class name should be Singular
  attr_accessible :birth, :name
end

2)コントローラーを編集します。

  class ActorsController < ApplicationController # Note Here the controller name should be plural without space
    def index
    end

    def new
      @actor = Actor.new  # In the new action, it should be classname.new not create
    end

    def create
      @actor = Actor.create(params[:actor]) # Here also the Actor class name should be singular
      if @actor.save
        redirect_to actor_path, :notice => "Your actor was saved."
      else
        render "new"
      end
    end
  end

PS:

1)ビューのフォルダ名も複数形である必要があるため、フォルダ名はapp/view/actors2)コントローラー名をのように変更しますactors_controller3)ルートでは、である必要がありますresources :actors4)どこから始めてどこで終わるかを見つけるために、コードを正しいインデックスに合わせる必要があります。これは、コーディングを開始するための良い方法です。それはあなたが間違っているところを見つけるためにあなたの50%の問題を解決します。

于 2013-03-27T12:48:18.900 に答える
0

コントローラアクションで、間違ったパラメータ名があります:

Actors.create(params[:movie]) should be Actors.create(params[:actors])
于 2013-03-27T12:42:10.287 に答える
0

新しいアクションコードを次のように変更します。

@actor = Actors.new

モデルクラスがActorsであることを確認します。動作する可能性があります。

于 2013-03-27T12:47:45.713 に答える
0

ここで多くの問題が発生しています:

  1. コントローラ名は複数形である必要があり、ファイルの名前を次のように変更する必要がありますactors_controller.rb

  2. モデル名は単数形である必要があります。ファイル名を次のように変更することも確認してください。actor.rb

  3. 新しいアクションはすべきではあり@actor = Actors.newませんcreate。#createは#newと#saveの短いバージョンです。

  4. paramsハッシュはparams[:actor]

class ActorsController < ApplicationController   
     def index   
     end

     def new
        @actor = Actor.new   
     end

     def create
        @actor = Actor.create(params[:actor])
        if @actor.save
            redirect_to actor_path, :notice => "Your actor was saved."
        else
            render "new"
        end   
     end 
  end

また、Actor.rbのモデル名を変更し、それがモデルの名前であることを確認してください。また、この場合、移行をチェックアウトする必要があります。

  class Actor < ActiveRecord::Base 
    attr_accessible :birth, :name
  end
于 2013-03-27T12:49:08.490 に答える
0

@actor = Actors.create@actor変数を新しく作成されたActorsオブジェクトに割り当てるため、これは間違っています。Processing by ActorController#update as HTMLオブジェクトがすでに作成されており、更新しようとしているため、出力に表示されるのはそのためです。

これを次のように変更する必要があります@actor = Actors.new

于 2013-03-27T12:58:49.133 に答える