2012-06-21 35 views
0

我試圖使用Rails控制檯來創建我的模型的對象實例。Subject.create()在RoR中不工作

它可以創建並使用手工方法,像這樣的實例保存到數據庫中:

1.9.3p125 :003 > subject = Subject.new 
=> #<Subject id: nil, name: nil, position: nil, visible: false, created_at: nil, updated_at: nil> 
1.9.3p125 :004 > subject.name = "First Name" 
=> "First Name" 
1.9.3p125 :005 > subject.position = 1 
=> 1 
1.9.3p125 :006 > subject.visible = 'true' 
=> "true" 
1.9.3p125 :007 > subject.save 
(0.2ms) BEGIN 
SQL (0.6ms) INSERT INTO `subjects` (`created_at`, `name`, `position`, `updated_at`, `visible`) VALUES ('2012-06-21 13:28:35', 'First Name', 1, '2012-06-21 13:28:35', 1) 
(20.4ms) COMMIT 
=> true 
1.9.3p125 :008 > subject.id 
=> 1 
1.9.3p125 :009 > subject.new_record? 
=> false 

我完全陌生的回報率,所以我有不知道從哪裏開始故障排除這錯誤:

1.9.3p125 :010 > subject = Subject.create(:name => "Second name", :position => 2) 
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: name, position from /Users/Nick/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb:48:in `process_removed_attributes' 
from /Users/Nick/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb:20:in `debug_protected_attribute_removal' 
from /Users/Nick/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb:12:in `sanitize' 
from /Users/Nick/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security.rb:230:in `sanitize_for_mass_assignment' 
from /Users/Nick/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.3/lib/active_record/attribute_assignment.rb:75:in `assign_attributes' 
from /Users/Nick/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.3/lib/active_record/base.rb:498:in `initialize' 
from /Users/Nick/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.3/lib/active_record/persistence.rb:44:in `new' 
from /Users/Nick/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.3/lib/active_record/persistence.rb:44:in `create' 
from (irb):10 
from /Users/Nick/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.3/lib/rails/commands/console.rb:47:in `start' 
from /Users/Nick/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start' 
from /Users/Nick/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.3/lib/rails/commands.rb:41:in `<top (required)>' 
from script/rails:6:in `require' 
from script/rails:6:in `<main>' 

這裏是我的主題模式:

class Subject < ActiveRecord::Base 
    attr_accessible :title, :body, :name, :position 
end 

謝謝!

事情我試過到目前爲止:

  1. 退出並重新輸入軌℃。
  2. 輸入「reload!」進入軌道ç
  3. 重啓終端

回答

1

您需要添加

attr_accessible :name, :position 

要將Subject模型,因此您可以在一個步驟創建此。它是安全的事情。你可以閱讀這個在這裏:

http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_accessible

HF ..

+0

似乎沒有工作。我打開了主題模型,並將這兩個屬性添加到列表中。然後我在rails c中運行它,它似乎沒有工作 –

+0

@ ninja08你是否重新啓動了控制檯/重新加載了模型?如果沒有,控制檯仍在使用舊的,未更改的版本。在控制檯中運行'reload!'通常會更新這些內容,但如果沒有,請退出並重新打開控制檯。 – MrTheWalrus

+0

@MrTheWalrus謝謝,儘管目前爲止這兩個選項都沒有奏效。 –

0

我遇到了同樣的問題 的解決辦法是做這樣

subject=Subject.create(name: 'Second name', position: 2)

它的工作原理對我來說很好