我正在尝试添加关系字段下拉选择到现有表。我目前的架构
create_table "hardwares", force: :cascade do |t|
t.string "serialnumber"
t.string "modelnumber"
t.string "modeltype"
t.string "location"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "poc_id"
t.index ["poc_id"], name: "index_hardwares_on_poc_id"
end
create_table "pocs", force: :cascade do |t|
t.string "name"
t.string "address"
t.string "facility"
t.string "phone"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
我运行迁移时创建了硬件表中的索引字段。
rails g migration addPocReferencesToHardwares poc:references
生成下面的迁移文件以及模式中的索引
class AddPocReferencesToHardwares < ActiveRecord::Migration[5.1]
def change
add_reference :hardwares, :poc, foreign_key: true
end
end
在建立关系之后,我希望能够通过名称选择硬件的POC作为所有可用POC的下拉。
我将此添加到硬件表单:
<div class="field">
<%= form.label "POC" %>
<%= form.collection_select(:poc_id, Poc.all, :id, :name, { :prompt => 'Select a POC', :selected => @poc.poc_id }, { class: 'form-control' }) %>
</div>
我得到的错误是“未定义的方法`poc_id'代表nil:NilClass”。如何允许下拉选择以将POC添加到硬件?
答案 0 :(得分:1)
问题是我将关系设置为POC属于硬件,因此在Form字段中需要:
<div class="field">
<%= form.label "POC" %>
<%= form.collection_select(:poc_id, Poc.all, :id, :name, { :prompt => 'Select a POC', :selected => @hardware.poc_id }, { class: 'form-control' }) %>
</div>