rails 5 collection select

rails 5 collection select

我正在尝试创建一个 collection_select 下拉列表,其中包含另一个模型的字段值。我得到了以下 2 个型号:

Documents:

class CreateDocuments < ActiveRecord::Migration[5.0]
  def change
    create_table :documents do |t|
      t.string :etiquette_number
      t.string :etiquette_type
      t.boolean :important
      t.string :work_text
      t.integer :user_id


      t.timestamps
    end
  end
end

Entries:

class CreateEntries < ActiveRecord::Migration[5.0]
  def change
    create_table :entries do |t|
      t.integer :document_id
      t.integer :user_id
      t.string :work
      t.date :date
      t.integer :time

      t.timestamps
    end
  end
end

我想在 document_id(在 Entries 模型中)上获得下拉菜单 select,我可以在其中 select 文档 ID 的值。

到目前为止我已经明白了,但我不确定这是否是正确的方法

models/document.rb

class Document < ApplicationRecord
  has_many :Entries
end

models/entry.rb

class Entry < ApplicationRecord
  belongs_to :Documents
end

我真的希望有人能帮助我,正如你在标题中看到的那样,我正在使用 Rails 5.

您应该使用如下代码的关联

当您使用 has_many 时,型号名称应为 plural

class Document < ApplicationRecord
  has_many :entries
end

当您使用 belongs_to 时,型号名称应为 singular

class Entry < ApplicationRecord
  belongs_to :document
end

您可以像下面那样在 entry 中写入 select 标签

 @documents = Document.all

 <%= f.select :document_id, @documents.collect { |d| [ d.name, d.id ] }, include_blank: true %>

@documents 是包含所有文档的保险变量。

谢谢

class Document < ApplicationRecord
 has_many :entries
end


class Entry < ApplicationRecord
 belongs_to :document
end

在您的视图文件中:new.html.erb

 <%= f.select :document_id, Document.all.collect { |p| p.id }, include_blank: true %>

您需要将文档的范围限定为属于该条目的文档

<%= f.select :document_id, entry.documents, include_blank: true %>