В Rails 3.1 Как мне создать список выбора для формы, имеющей ассоциацию own_to? - PullRequest
1 голос
/ 03 января 2012

GIST здесь: https://gist.github.com/1553371

Вот мои модели:

class Character < ActiveRecord::Base
  has_many :weapons
end

class Weapon < ActiveRecord::Base
  belongs_to :character
end

и вот как выглядит мой взгляд на HAML:

= form_for(@weapon) do |f|
  %ul.fields
    %li
      = f.label :character
      = collection_select :weapon, :character_id, Character.all, :id, :name, {:prompt => 'Please Select a Character.'}

но я продолжаю получать эту ошибку:

undefined method `character_id' for #<Weapon:0x007f9033232088>

Я пытался использовать строку для character_id, которая также не работала.Форма визуализируется с :character, но тогда, конечно, она не сохранится обратно, так как ей требуется id.

Ответы [ 2 ]

3 голосов
/ 03 января 2012

Ваш код выглядит нормально, скорее всего, у вас нет поля character_id на вашей модели оружия.Если вы это сделаете, то у вас есть ожидающие миграции, которые нужно запустить.

Вы можете проверить текущее состояние вашей базы данных, посмотрев на db/schema.db, она покажет, есть ли у вас столбец character_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
1 голос
/ 03 января 2012

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.'} )
...