2

仍然插入我的第一个 rails 程序(Ruby 2.0,Rails 4.0)。主模型“联系人”应在其表单中包含“颜色”表的下拉列表。我已经添加了 Color 模型,创建了 html 下拉菜单并尝试为 Color 模型播种(下拉菜单当前显示一个空菜单)。我正在从两个数组中填充seeds.rb 中的颜色,并已验证两个数组都充满了字符串值(与各自的颜色迁移列相同的值)。当我尝试将数组值放入 Color 表时,它会创建正确数量的条目(我的数组每个大小为 140 个元素),但两列中的所有条目都是 nil。

下面是我的seeds.rb

额外的菜鸟问题?如何在 linux 机器上将代码粘贴到 Stackoverflow 中而不是输入代码?

colors = Array.new
colors = File.readlines("db/seeds/colornames.csv").map! {|name| name.chomp}

hexes = Array.new
hexes = File.readlines("db/seeds/colorhexes.csv").map! {|hex| hex.chomp}

Color.delete_all #because I keep having to reseed
x = 0
colors.each do |color|
  Color.create!(:name => color, :hex => hexes[x])
  x+=1
end

和contact.rb

class Contact < ActiveRecord::Base
  attr_accessible :first_name, :last_name, :email, :zip_code, :favorite_color, :color_id #I have brought in the right gem to use this older method
  belongs_to :color 

  #validation of fields other than :favorite_color in here. Nothing pertinent to this q

  #favorite color validation
  validates_presence_of :favorite_color

end

和 color.rb

class Color < ActiveRecord::Base
  has_many :contacts
end
4

2 回答 2

2

你有这个 gem 安装 github.com/rails/protected_attributes 吗?如果是真的,那么您需要像在 Rails 3 中一样将此行添加到您的模型中:

attr_accessible :name, :hex
于 2013-10-13T15:33:37.977 回答
1

通过查看代码,我不确定您的问题是什么,我建议您进行一些糟糕的调试 -puts是您的朋友

你也可以发布你的模型代码吗?

您可以对代码进行一些红宝石更改

  • Array.new 在 ruby​​ 代码中很少见,请[]改用,在这种情况下根本不需要初始化变量
  • map!在这种情况下不需要打电话,map会做
  • Array (Enumerable) 有一个方法each_with_index,你可以避免 x 本地
  • 使用 ruby​​ 1.9 哈希语法

例子

colors = File.readlines("db/seeds/colornames.csv").map {|name| name.chomp}
hexes = File.readlines("db/seeds/colorhexes.csv").map {|hex| hex.chomp}

Color.delete_all # because I keep having to reseed

colors.each_with_index do |color, index|
  Color.create!(name: color, hex: hexes[index])
end

现在进行一些调试

colors = File.readlines("db/seeds/colornames.csv").map {|name| name.chomp}
hexes = File.readlines("db/seeds/colorhexes.csv").map {|hex| hex.chomp}

puts "Color Count: #{colors.length}"
puts "Hex Count: #{hexes.length}"

Color.delete_all # because I keep having to reseed

colors.each_with_index do |color, index|
  puts "#{color}: #{hexes[index}"
  Color.create!(name: color, hex: hexes[index])
end    

puts "Loaded: #{Color.count} colors"
于 2013-10-13T14:24:33.783 回答