Rails 使用 collection_select 将设备分配到站点

Rails use collection_select to assign equipment to site

我有一个非常简单的 rails 应用程序,它收集 "equipment" 并将其分配给 "site"

    class CreateEquipment < ActiveRecord::Migration[5.0]
  def change
    create_table :equipment do |t|
      t.string :site_name
      t.string :equip_name
      t.string :equip_model
      t.string :equip_make
      t.string :equip_type
      t.belongs_to :site
      t.timestamps
    end
  end
end


class CreateSites < ActiveRecord::Migration[5.0]
  def change
    create_table :sites do |t|
      t.string :site_name

      t.timestamps
    end
  end
end

两个模型 "Equipment" 和 "Site"

class Equipment < ApplicationRecord

end

class Site < ApplicationRecord

    has_many :equipment

end

我已经设置了设备belongs_to站点和站点has_many设备

在我的装备表里我也有一个collection_select可以选择分配装备的站点

<div class="field">
    <%= f.label :site_name %>
    <%= f.collection_select :site_name, Site.all, :site_name, :site_name, prompt: true %>
  </div>

  <div class="field">
    <%= f.label :equip_name %>
    <%= f.text_field :equip_name %>
  </div>

  <div class="field">
    <%= f.label :equip_model %>
    <%= f.text_field :equip_model %>
  </div>


<div class="field">
    <%= f.label :equip_make %>
    <%= f.text_field :equip_make %>
  </div>
  <div class="field">
    <%= f.label :equip_type %>
    <%= f.text_field :equip_type %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

并且在站点展示页面上,我已经开始设置展示设备的页面。

<p>
  <strong>Sitename:</strong>
  <%= @site.site_name %>
</p>

<% @site.equipment.each do |equipment| %>
  <p><%= equipment.equip_name %></p>
<% end %>

但是我打开站点显示页面却看不到任何设备

我在表单或页面上没有遇到任何错误或问题,我已允许所有参数。我想我可能 collection_select 设置不正确。

更新:在 Rails 教程第 14.1.2 节 User/relationship 协会上观看 Michael Hartl 的 Ruby User/relationship 并感受到一些启示,即任何有此问题的人也应该获得隐私。

好吧,我在玩 rails 的过程中学到了很多东西。希望当新手发现这个时,他们会看到我犯的非常简单的错误。

我没有将关联添加到站点

class Equipment < ApplicationRecord

end

class Site < ApplicationRecord

    has_many :equipment

end

应该是

class Equipment < ApplicationRecord
 belongs_to :site
end

class Site < ApplicationRecord

    has_many :equipment

end

并且 table 应该从

改变
class CreateEquipment < ActiveRecord::Migration[5.0]
  def change
    create_table :equipment do |t|
      t.string :site_name
      t.string :equip_name
      t.string :equip_model
      t.string :equip_make
      t.string :equip_type
      t.belongs_to :site
      t.timestamps
    end
  end
end

class CreateEquipment < ActiveRecord::Migration[5.0]
  def change
    create_table :equipment do |t|
      t.string :equip_name
      t.string :equip_model
      t.string :equip_make
      t.string :equip_type
      t.references :site
      t.timestamps
    end
  end
end

我希望对某人有所帮助:)