Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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 在Rails 3.1中,如何为具有“属于”关联的表单创建选择列表?_Ruby On Rails_Ruby_Forms_Activerecord_Haml - Fatal编程技术网

Ruby on rails 在Rails 3.1中,如何为具有“属于”关联的表单创建选择列表?

Ruby on rails 在Rails 3.1中,如何为具有“属于”关联的表单创建选择列表?,ruby-on-rails,ruby,forms,activerecord,haml,Ruby On Rails,Ruby,Forms,Activerecord,Haml,要点如下: 以下是我拥有的模型: class Character < ActiveRecord::Base has_many :weapons end class Weapon < ActiveRecord::Base belongs_to :character end 但我一直在犯这样的错误: undefined method `character_id' for #<Weapon:0x007f9033232088> 未定义的方法“character\u

要点如下:

以下是我拥有的模型:

class Character < ActiveRecord::Base
  has_many :weapons
end

class Weapon < ActiveRecord::Base
  belongs_to :character
end
但我一直在犯这样的错误:

undefined method `character_id' for #<Weapon:0x007f9033232088>
未定义的方法“character\u id”#
我尝试使用字符串作为
字符\u id
,但同样无效。表单以
:字符
呈现,但是当然它不会保存回来,因为它需要
id

api文档:

collection_select(method, collection, value_method, text_method, options = {}, html_options = {})
所以你想要

f.collection_select( :character_id, Character.all, :id, :name, {:prompt => 'Please Select a Character.'} )
api文档:

collection_select(method, collection, value_method, text_method, options = {}, html_options = {})
所以你想要

f.collection_select( :character_id, Character.all, :id, :name, {:prompt => 'Please Select a Character.'} )

您的代码看起来不错,很可能您的武器型号上没有
字符\u id
字段。如果这样做,则需要运行挂起的迁移

您可以通过查看
db/schema.db
来检查数据库的当前状态,它将显示您是否有character\u id列

您可以使用
rake db:migrate
运行迁移,然后使用
rake db:test:prepare
更新测试数据库

如果在运行迁移后它不起作用,那么您需要创建一个,应该类似于:

# db/migrations/add_character_id_to_weapons.rb
class AddCharacterIdToWeapons < ActiveRecord::Migration
  def change
    add_column :weapons, :character_id, :integer
  end
end
#db/migrations/add_character_id_to_wearms.rb
类AddCharacterIdToWeapons
您的代码看起来不错,很可能您的武器型号上没有
字符id
字段。如果这样做,则需要运行挂起的迁移

您可以通过查看
db/schema.db
来检查数据库的当前状态,它将显示您是否有character\u id列

您可以使用
rake db:migrate
运行迁移,然后使用
rake db:test:prepare
更新测试数据库

如果在运行迁移后它不起作用,那么您需要创建一个,应该类似于:

# db/migrations/add_character_id_to_weapons.rb
class AddCharacterIdToWeapons < ActiveRecord::Migration
  def change
    add_column :weapons, :character_id, :integer
  end
end
#db/migrations/add_character_id_to_wearms.rb
类AddCharacterIdToWeapons
我一直在避免添加新的迁移,因为文档似乎暗示rails有一些神奇的功能,可以自动添加_id列,我担心会让事情变得更糟,但这完全有效。非常感谢!我一直在避免添加新的迁移,因为文档似乎暗示rails有一些神奇的功能,可以自动添加_id列,我担心会让事情变得更糟,但这完全有效。非常感谢!