0

(對不起,我的英語) 如果我想上傳一個新的紀錄,:name:date PARAMS,那是什麼,我發現:回報率:.create尼爾斯

控制器:

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) 

回答

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)在查看文件夾名稱應該是Plural,所以你的文件夾名稱是app/view/actors2)更改您的控制器名稱,如actors_controller3)在你的路線,它應該是resources :actors4)您需要用正確的降低排列代碼以找到您開始的位置和結束位置。這是開始編碼的好方法。它會解決你的50%問題,找出你做錯的地方。

+0

末-1但 當我解決它之後,它使另一個錯誤: 未初始化的常數ActorController :: Actor – 2013-03-27 12:51:22

+0

查看我的更新回答。在控制器中它應該是複數。所以,'ActorsController :: ApplicationController' – Vinay 2013-03-27 12:53:52

+0

期望/home/ben/blog/app/controllers/actor_controller.rb來定義ActorController – 2013-03-27 12:58:06

0

在你的控制器動作,你打錯參數名:

Actors.create(params[:movie]) should be Actors.create(params[:actors]) 
+0

,你應該命名類的單數形式=>演員,不是演員 – Lichtamberg 2013-03-27 12:42:43

0

更改您的新的行動代碼:

@actor = Actors.new 

並確認您的模型類是Actors 它可能有效。

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 
+0

未初始化的常量ActorController – 2013-03-27 12:55:06

+1

您還必須更改文件名。它應該是actors_controller.rb – Zippie 2013-03-27 12:55:47

0

@actor = Actors.create是錯誤的,因爲它將@actor變量分配給新創建的Actors對象。這就是爲什麼你在輸出中看到Processing by ActorController#update as HTML,因爲該對象已經創建並正在嘗試更新它。

你應該這樣順便說一句改爲@actor = Actors.new