gpt4 book ai didi

ruby-on-rails - Rails3 种子数据嵌套属性

转载 作者:行者123 更新时间:2023-12-02 03:57:33 25 4
gpt4 key购买 nike

我在这里做错了什么?表单可以工作,但在尝试播种数据时不断收到“:street1:Symbol 的未定义方法‘to_i’”。

编辑=如果我将所有内容都作为单个地址(has_one 而不是 has_many)种子进行。

编辑 2 = 请参阅下面其他人的答案...

address.rb
class Address < ActiveRecord::Base
attr_accessible :street1, :street2, :city, :state, :zipcode, :deleted_at, :addressable_type, :addressable_id, :current, :full_address, :address_type
belongs_to :addressable, :polymorphic => true
scope :vendor, where("address_type='Vendor'")

before_save :update_full_address

def update_full_address
unless self.street2.blank?
street = self.street1 + "<br />" + self.street2 + "<br />"
else
street = self.street1 + "<br />"
end
citystatezip = self.city + ", " + self.state + " " + self.zipcode
self.full_address = street + citystatezip
end
end

供应商.rb

class Vendor < ActiveRecord::Base
attr_accessible :name, :contact, :phone, :addresses_attributes
has_many :addresses, :as => :addressable
accepts_nested_attributes_for :addresses, :allow_destroy => true, :reject_if => proc { |obj| obj.blank? }
end

种子数据

require 'faker'

Vendor.delete_all
["Company A", "Company B", "Company C", "Company D"].each do |c|
params = {:vendor =>
{
:name => c,
:contact => Faker::Name.name,
:phone => Faker::PhoneNumber.phone_number,
:addresses_attributes => {
:street1 => Faker::Address.street_address,
:city => Faker::Address.city,
:state => Faker::Address.us_state_abbr,
:zipcode => Faker::Address.zip_code,
:address_type => "Vendor"
}
}
}
Vendor.create!(params[:vendor])
end
<小时/>

在处理 has_many 时,请注意数组的 []。

require 'faker'

Vendor.delete_all
["Company A", "Company B", "Company C", "Company D"].each do |c|
params = {:vendor =>
{
:name => c,
:contact => Faker::Name.name,
:phone => Faker::PhoneNumber.phone_number,
:addresses_attributes => [{
:street1 => Faker::Address.street_address,
:city => Faker::Address.city,
:state => Faker::Address.us_state_abbr,
:zipcode => Faker::Address.zip_code,
:address_type => "Vendor"
}]
}
}
Vendor.create!(params[:vendor])
end

最佳答案

accepts_nested_attributes_for :foo 以便您可以创建可创建关联记录的表单。当你用代码构建东西时,没有必要使用它。您可以使用关联名称而不是“address_attributes”来创建关联记录。这是一种方法,但 Rails 确实公开了许多方法来完成同样的事情......

["Company A", "Company B", "Company C", "Company D"].each do |c|
vendor_address = Address.new :street1 => Faker::Address.street_address,
:city => Faker::Address.city,
:state => Faker::Address.us_state_abbr,
:zipcode => Faker::Address.zip_code,
:address_type => "Vendor"

Vendor.create! :name => c,
:contact => Faker::Name.name,
:phone => Faker::PhoneNumber.phone_number,
:addresses => [vendor_address]
end

如果您想尝试使用嵌套属性方式,那么您不需要哈希的 :vendor => {} 部分,您可以直接进入参数,然后您需要 addresses_attributes 是一个数组,而不是散列。

关于ruby-on-rails - Rails3 种子数据嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5128765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com