rails 5集合选择

时间:2016-08-12 08:01:49

标签: ruby-on-rails ruby ruby-on-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_idEntries模型)中选择下拉列表,我可以在其中选择文档ID的值。

到目前为止,我得到了这个,但我不确定它是否是正确的方式

models/document.rb

class Document < ApplicationRecord
  has_many :Entries
end

models/entry.rb

class Entry < ApplicationRecord
  belongs_to :Documents
end

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

3 个答案:

答案 0 :(得分:3)

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 %>

答案 1 :(得分:1)

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

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

class Document < ApplicationRecord
  has_many :entries
end

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

class Entry < ApplicationRecord
  belongs_to :document
end

您可以在entry内写下选择标记,如下所示

 @documents = Document.all

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

@documents是保险变量,包含所有文件。

由于

答案 2 :(得分:0)

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

JTabbedPane