1

我有一个非常简单的 Rails 应用程序,它收集“设备”并将其分配给“站点”

    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

两个模型“设备”和“站点”

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 设置可能不正确。

更新:观看 Michael Hartl 的 Ruby on Rails 教程第 14.1.2 节用户/关系关联并感受到一些启发,任何有此问题的人也应该了解一下。

4

1 回答 1

0

好吧,在我玩 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

并且表格应该从

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

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

于 2018-05-06T07:16:08.163 回答