簡體   English   中英

在Rails 3.1中如何為具有belongs_to關聯的表單創建選擇列表?

[英]In Rails 3.1 How do I create a select list for a form that has a belongs_to association?

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

您的代碼看起來很好,很可能您的武器模型上沒有character_id字段。 如果您這樣做,則表示您需要運行待定遷移。

您可以通過查看db/schema.db來檢查數據庫的當前狀態,如果您有character_id列,它將顯示。

您可以使用rake db:migrate運行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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM