如何创建 Rails 页面,其数据包含字段中的特定值
How to create Rails page that has data containing specific value in a field
我的 rails 应用程序 "sp5s#index" 中有一个页面填充了数据。在此页面上有一个名为 Lab 的列。我想知道如何创建另一个仅包含特定 Lab 值为 "primary" 的数据的网页。我有一个使用 sunspot solr 的搜索字段,允许我搜索它,但我想要它自己的页面包含所需的数据。创建此页面后,每当我在实验室列下使用 "primary" 的值在 "sp5s#index" 中创建新条目时,我也想进行更新。我是 rails 的新手,一直在学习不同的教程和学习。对此的任何帮助将不胜感激。
控制器
class Sp5sController < ApplicationController
before_action :set_sp5, only: [:show, :edit, :update, :destroy]
# GET /sp5s
# GET /sp5s.json
def index
@search = Sp5.search do
fulltext params[:search]
order_by(:RU, :desc)
end
@sp5s = @search.results
end
查看
<% provide(:title, "SP5") %>
<p id="notice"><%= notice %></p>
<h1>SP5</h1>
<%= form_tag sp5s_path, :method => :get do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
<head>
<style>
table, th, td { border: 1px solid black;}
th, td { padding: 15px;}
</style>
</head>
<table>
<thead>
<tr>
<th>Ru</th>
<th>Devname</th>
<th>Devtype</th>
<th>Lab</th>
<th>Swportib</th>
<th>Swport1</th>
<th>Swport2</th>
<th>Swport3</th>
<th>Ibip</th>
<th>Nic1</th>
<th>Nic2</th>
<th>Nic3</th>
<th>Nic1mac</th>
<th>Nic2mac</th>
<th>Nic3mac</th>
<th>Ibmac</th>
<th>Psu1</th>
<th>Psu2</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @sp5s.each do |sp5| %>
<tr>
<td><%= sp5.RU %></td>
<td><%= sp5.DevName %></td>
<td><%= sp5.DevType %></td>
<td><%= sp5.Lab %></td>
<td><%= sp5.swPortIB %></td>
<td><%= sp5.swPort1 %></td>
<td><%= sp5.swPort2 %></td>
<td><%= sp5.swPort3 %></td>
<td><%= sp5.IBIP %></td>
<td><%= sp5.NIC1 %></td>
<td><%= sp5.NIC2 %></td>
<td><%= sp5.NIC3 %></td>
<td><%= sp5.NIC1mac %></td>
<td><%= sp5.NIC2mac %></td>
<td><%= sp5.NIC3mac %></td>
<td><%= sp5.IBmac %></td>
<td><%= sp5.PSU1 %></td>
<td><%= sp5.PSU2 %></td>
<td><%= link_to 'Show', sp5 %></td>
<td><%= link_to 'Edit', edit_sp5_path(sp5) %></td>
<td><%= link_to 'Destroy', sp5, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Sp5', new_sp5_path %>
我想创建一个新页面,其中仅包含 "Lab" 列值为 "primary" 的项目的数据。
编辑后的答案:
您将在控制器中创建一个新视图,并使用 arel 分配实例变量,这只会挑选出该列中具有主要内容的条目。
def primary
@sp5s = Sp5.where("lab like ?", "%primary%")
end
然后,为该页面创建一个视图,例如。 app/views/sp5s/primary.html.erb
并在该视图中执行您的循环,就像在您问题的示例代码中的视图中一样。这一次,因为实例变量不是搜索,它被设置为数据库搜索 where lab == primary,它现在将只循环主要的。
您可能必须设置到此页面的路由,具体取决于您是否使用资源。
例如。 get '/primary/', to: 'sp5s#primary'
我的 rails 应用程序 "sp5s#index" 中有一个页面填充了数据。在此页面上有一个名为 Lab 的列。我想知道如何创建另一个仅包含特定 Lab 值为 "primary" 的数据的网页。我有一个使用 sunspot solr 的搜索字段,允许我搜索它,但我想要它自己的页面包含所需的数据。创建此页面后,每当我在实验室列下使用 "primary" 的值在 "sp5s#index" 中创建新条目时,我也想进行更新。我是 rails 的新手,一直在学习不同的教程和学习。对此的任何帮助将不胜感激。
控制器
class Sp5sController < ApplicationController
before_action :set_sp5, only: [:show, :edit, :update, :destroy]
# GET /sp5s
# GET /sp5s.json
def index
@search = Sp5.search do
fulltext params[:search]
order_by(:RU, :desc)
end
@sp5s = @search.results
end
查看
<% provide(:title, "SP5") %>
<p id="notice"><%= notice %></p>
<h1>SP5</h1>
<%= form_tag sp5s_path, :method => :get do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
<head>
<style>
table, th, td { border: 1px solid black;}
th, td { padding: 15px;}
</style>
</head>
<table>
<thead>
<tr>
<th>Ru</th>
<th>Devname</th>
<th>Devtype</th>
<th>Lab</th>
<th>Swportib</th>
<th>Swport1</th>
<th>Swport2</th>
<th>Swport3</th>
<th>Ibip</th>
<th>Nic1</th>
<th>Nic2</th>
<th>Nic3</th>
<th>Nic1mac</th>
<th>Nic2mac</th>
<th>Nic3mac</th>
<th>Ibmac</th>
<th>Psu1</th>
<th>Psu2</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @sp5s.each do |sp5| %>
<tr>
<td><%= sp5.RU %></td>
<td><%= sp5.DevName %></td>
<td><%= sp5.DevType %></td>
<td><%= sp5.Lab %></td>
<td><%= sp5.swPortIB %></td>
<td><%= sp5.swPort1 %></td>
<td><%= sp5.swPort2 %></td>
<td><%= sp5.swPort3 %></td>
<td><%= sp5.IBIP %></td>
<td><%= sp5.NIC1 %></td>
<td><%= sp5.NIC2 %></td>
<td><%= sp5.NIC3 %></td>
<td><%= sp5.NIC1mac %></td>
<td><%= sp5.NIC2mac %></td>
<td><%= sp5.NIC3mac %></td>
<td><%= sp5.IBmac %></td>
<td><%= sp5.PSU1 %></td>
<td><%= sp5.PSU2 %></td>
<td><%= link_to 'Show', sp5 %></td>
<td><%= link_to 'Edit', edit_sp5_path(sp5) %></td>
<td><%= link_to 'Destroy', sp5, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Sp5', new_sp5_path %>
我想创建一个新页面,其中仅包含 "Lab" 列值为 "primary" 的项目的数据。
编辑后的答案:
您将在控制器中创建一个新视图,并使用 arel 分配实例变量,这只会挑选出该列中具有主要内容的条目。
def primary
@sp5s = Sp5.where("lab like ?", "%primary%")
end
然后,为该页面创建一个视图,例如。 app/views/sp5s/primary.html.erb
并在该视图中执行您的循环,就像在您问题的示例代码中的视图中一样。这一次,因为实例变量不是搜索,它被设置为数据库搜索 where lab == primary,它现在将只循环主要的。
您可能必须设置到此页面的路由,具体取决于您是否使用资源。
例如。 get '/primary/', to: 'sp5s#primary'