Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 制造宝石:与属性关联的问题_Ruby On Rails 4_Fabrication Gem - Fatal编程技术网

Ruby on rails 4 制造宝石:与属性关联的问题

Ruby on rails 4 制造宝石:与属性关联的问题,ruby-on-rails-4,fabrication-gem,Ruby On Rails 4,Fabrication Gem,我正在将rails应用程序从3.2.x版升级到4.0.8版,我在ar类(位置)上制造(2.11.3版)时遇到了麻烦,ar类(位置)属于一个类别(但也属于HMBT类别),而类别则属于类型学 class Location belongs_to :category has_many :location_categories has_many :categories, through: :location_categories validates :title, :pr

我正在将rails应用程序从3.2.x版升级到4.0.8版,我在ar类(位置)上制造(2.11.3版)时遇到了麻烦,ar类(位置)属于一个类别(但也属于HMBT类别),而类别则属于类型学

class Location
    belongs_to :category
    has_many :location_categories
    has_many :categories, through: :location_categories

    validates :title, :presence => true
    validates :address_city, :presence => true
    validates :nation_id, :presence => true
    validates :phone, :phone_format => true
    validates :mobile, :phone_format => true
    validates :fax, :phone_format => true
    validates :email, :email_format => true
    validates :url, :url_format => true, :allow_blank => true
    validate :validate_category_default
    validates_attachment :logo, size: { in: 0..1.megabytes }, content_type: { content_type: [ 'image/jpg', 'image/jpeg', 'image/png', 'image/gif' ]}, if: Proc.new {|a| a.logo.present? }
    validates_with VersionValidator, :on => :update

    private


    def validate_category_default
        errors.add(:category_ids, I18n.t('activerecord.errors.messages.location.category_default')) unless category_ids.detect{|category| category == category_id }
    end

    # other stuff...
end


class Category
    belongs_to :typology

    validates :typology_id, :uniqueness => { :scope => :site_id }
    validates :title, :presence => true, :uniqueness => { :scope => :site_id }
    validates_with VersionValidator, :on => :update

    # other stuff...
end


class Typology

    validates :logic_title, :presence => true, :uniqueness => true
    validates_attachment :image, size: { in: 0..1.megabytes }, content_type: { content_type: [ 'image/jpg', 'image/jpeg', 'image/png', 'image/gif' ]}, if: Proc.new {|a| a.image.present? }
    validates_with VersionValidator, :on => :update

    # other stuff...
end
然后,在相对于位置的制造商上,当创建对象时,它还触发类别和类型相关的创建:

Fabricator(:location) do
    category(fabricator: :category)
    category_ids { |attrs| [ attrs[:category][:id] ] }
    # other stuff...
end


Fabricator(:category) do
    typology(fabricator: :typology)
    # other stuff...
end

Fabricator(:typology) do
    # other stuff...
end
现在的情况是,我在rails 4上创建位置时发现了一个问题(在rails 3上工作正常),这是堆栈跟踪:

from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/validations.rb:57:in `save!'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/attribute_methods/dirty.rb:41:in `save!'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/transactions.rb:275:in `block in save!'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/transactions.rb:330:in `block in with_transaction_returning_status'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/abstract/database_statements.rb:203:in `block in transaction'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/abstract/database_statements.rb:211:in `within_new_transaction'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/abstract/database_statements.rb:203:in `transaction'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/transactions.rb:209:in `transaction'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/transactions.rb:327:in `with_transaction_returning_status'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/transactions.rb:275:in `save!'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/fabrication-2.11.3/lib/fabrication/generator/base.rb:94:in `persist'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/fabrication-2.11.3/lib/fabrication/generator/base.rb:26:in `create'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/fabrication-2.11.3/lib/fabrication/schematic/definition.rb:75:in `block in fabricate'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/fabrication-2.11.3/lib/fabrication/schematic/definition.rb:74:in `instance_eval'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/fabrication-2.11.3/lib/fabrication/schematic/definition.rb:74:in `fabricate'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/fabrication-2.11.3/lib/fabricate.rb:29:in `create'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/fabrication-2.11.3/lib/fabrication.rb:62:in `Fabricate'
from (irb):18
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/railties-4.0.8/lib/rails/commands/console.rb:90:in `start'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/railties-4.0.8/lib/rails/commands/console.rb:9:in `start'
from /Users/my_user/.rvm/gems/ruby-2.1.0/gems/railties-4.0.8/lib/rails/commands.rb:62:in `<top (required)>'
from script/rails:6:in `require'
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/validations.rb:57:in'save!'
来自/Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/attribute_methods/dirty.rb:41:in“save!”
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/transactions.rb:275:in`block in save!'
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/transactions.rb:330:在`阻止进入并返回_事务状态'
来自/Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/abstract/database_语句。rb:203:“事务中的块”
来自/Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/abstract/database_statements.rb:211:in'within_new_transaction'
来自/Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/abstract/database_statements.rb:203:“事务”中
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/transactions.rb:209:in“transaction”
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/transactions.rb:327:in`with_transaction_returning_status'
来自/Users/my_user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.8/lib/active_record/transactions.rb:275:in'save!'
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/fabrication-2.11.3/lib/fabrication/generator/base.rb:94:in“persist”
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/fabrication-2.11.3/lib/fabrication/generator/base.rb:26:in“create”
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/fabrication-2.11.3/lib/fabrication/schematic/definition.rb:75:“制造中的块”
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/fabrication-2.11.3/lib/fabrication/schematic/definition.rb:74:in'instance_eval'
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/fabrication-2.11.3/lib/fabrication/schematic/definition.rb:74:in“mabridge”
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/facture-2.11.3/lib/facture.rb:29:in'create'
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/fabrication-2.11.3/lib/fabrication.rb:62:in'mabridge'
来自(irb):18
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/railties-4.0.8/lib/rails/commands/console.rb:90:in'start'
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/railties-4.0.8/lib/rails/commands/console.rb:9:in'start'
from/Users/my_user/.rvm/gems/ruby-2.1.0/gems/railties-4.0.8/lib/rails/commands.rb:62:in`'
来自脚本/rails:6:in'require'

但我不明白是什么原因造成的。

我认为这可能是模型验证的问题。您能否在这些模型上提供与这些字段相关的任何验证?此外,您不需要像在示例中那样在定义中指定制造商名称。它将从字段名自动推断出来。谢谢你,Paul,我用验证更新了类。堆栈跟踪还有其他内容吗?我没有看到任何明显的罪魁祸首。确保您使用的是最新版本的制造,因为前一段时间解决了一个导致痕迹被切断的问题。