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
我希望对某人有所帮助:)
我有一个非常简单的 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
我希望对某人有所帮助:)