从rails中的另一个表创建下拉列表

时间:2018-02-14 15:34:04

标签: ruby-on-rails ruby-on-rails-5.1

我正在尝试添加关系字段下拉选择到现有表。我目前的架构

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添加到硬件?

1 个答案:

答案 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>