2012-01-03 3 views
1

GISTはここにある: https://gist.github.com/1553371In Rails 3.1 belongs_to関連付けを持つフォームの選択リストを作成するにはどうすればよいですか?

これらは私が持っているモデルです。

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が必要なため、元に戻すことはできません。

答えて

3

をしたいあなたのコードは正常に見える、それはあなたがあなたの武器モデルにcharacter_idフィールドを持っていない可能性があります。その場合は、実行が必要な保留中の移行があります。

データベースの現在の状態を確認するには、db/schema.dbを参照して、character_id列があるかどうかを確認します。

を使用して移行を実行し、rake db:test:prepareを使用してテストデータベースを更新することもできます。

それがマイグレーションを実行した後に作業していないなら、あなたは1を作成する必要があります、のようなものになります。

# db/migrations/add_character_id_to_weapons.rb 
class AddCharacterIdToWeapons < ActiveRecord::Migration 
    def change 
    add_column :weapons, :character_id, :integer 
    end 
end 
+0

をドキュメントには自動的に_id列を追加する必要があるいくつかの魔法の魔法があることを暗示していますが、私は物事を悪化させるのを恐れていましたが、これは完全に機能します。本当にありがとう! –

1

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

をこれが私のために同じエラー生成します - 私はので、新しい移行を追加避けた/ –

関連する問題