2017-05-13 13 views
0

所以我一直在想測試我的模型,看看我是否可以通過軌道控制檯中使用Gallery.new(:picture => File.new('E:\Owner (Backup)\Pictures\Skateboard 1.jpg', 'r'))添加圖片,但我可以上市了以下錯誤下面。我這樣做是因爲我無法得到一張圖片以保存在我的Rails應用程序中,我只是重新渲染了new模板,並在新視圖中部分列出了表單。不能讓孩子屬性通過軌道加載ActiveModel控制檯父模型保存:: UnknownAttributeError:

我不知道如何任何人,因爲從我可以看到我的模型都很好故障排除這些錯誤。而且我的遷移看起來也很好。我想accept_nested_attributes_for允許Picture模型屬性通過Gallery模型傳遞。

在控制檯中的錯誤是

irb(main):002:0> Gallery.new(:picture => File.new('E:\Owner (Backup)\Pictures\Skateboard 1.jpg', 'r')) 
ActiveModel::UnknownAttributeError: unknown attribute 'picture' for Gallery. 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/activemodel-5.0.1/lib/active_model/attribute_assignment.rb:48:in `_assign_attribute' 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/activemodel-5.0.1/lib/active_model/attribute_assignment.rb:40:in `block in _assign_attributes' 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/activemodel-5.0.1/lib/active_model/attribute_assignment.rb:39:in `each' 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/activemodel-5.0.1/lib/active_model/attribute_assignment.rb:39:in `_assign_attributes' 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-5.0.1/lib/active_record/attribute_assignment.rb:26:in `_assign_attributes' 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/activemodel-5.0.1/lib/active_model/attribute_assignment.rb:33:in `assign_attributes' 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-5.0.1/lib/active_record/core.rb:319:in `initialize' 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-5.0.1/lib/active_record/inheritance.rb:65:in `new' 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-5.0.1/lib/active_record/inheritance.rb:65:in `new' 
    from (irb):2 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-5.0.1/lib/rails/commands/console.rb:65:in `start' 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-5.0.1/lib/rails/commands/console_helper.rb:9:in `start' 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:78:in `console' 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!' 
    from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4:in `<main>'irb(main):003:0> ^C 
irb(main):003:0> 

我的模型,畫廊

class Gallery < ApplicationRecord 
    has_many :pictures 
    validates :name, presence: true 
    validates :cover, presence: true 
    accepts_nested_attributes_for :pictures, allow_destroy: true 
end 

圖片

class Picture < ApplicationRecord 
    belongs_to :gallery 
    validates :gallery_id, presence: true 
    validates :picture, presence: true 
    mount_uploader :picture, PictureUploader 
    serialize :picture, JSON 
end 

遷移,畫廊

class CreateGalleries < ActiveRecord::Migration[5.0] 
    def change 
    create_table :galleries do |t| 
     t.string :name 
     t.integer :cover 

     t.timestamps 
    end 
    end 
end 

圖片

class CreatePictures < ActiveRecord::Migration[5.0] 
    def change 
    create_table :pictures do |t| 
     t.integer :gallery_id 
     t.string :picture 

     t.timestamps 
    end 
    end 
end 

回答

1

ActiveModel::UnknownAttributeError: unknown attribute 'picture' for Gallery.

你做錯了。你應該圖片畫廊實例,而不是把它當作一個屬性的畫廊模式

g = Gallery.new(name: 'Some Name', cover: 'Some Cover') 
g.save! 
p = g.pictures.new(picture: File.new('E:\Owner (Backup)\Pictures\Skateboard 1.jpg', 'r')) 
p.save! 
+0

嗨好吧,現在的作品有點混亂。我是否需要在控制器中以這種方式執行此操作,保存每個實例,因爲我無法使用標準方式'@gallery = Gallery.new(gallery_params)'保存它? –

+0

@LeeEather不需要。我們可以藉助強大的參數。如果你可以問另一個問題,我可以幫你 – Pavan

+0

這裏是問題[這裏](http://stackoverflow.com/questions/43951335/rails-nested-attributes-not-saving-using-carrierwave)和改變'你的答案中的'圖片'到'圖片'。 –

相關問題