添加仅与前一行关联的行

Adding rows that are only associate with previous row

我有一个 table 呼叫 Municipalities 和另一个呼叫 Forms。表单有 1 个自治市,并存储一个名为 municipality_id.

的变量

当您从下拉菜单中 select 一个州时,它只会显示具有该 state_id 的自治市。到那时,我还想显示与市政府相关的所有表格。

我无法只显示该市政当局的表格,而不是所有表格。

到目前为止,这是我的代码:

查看:

 <div class="form-group">

<div>
<% @municipalities.each do |municipality| %>
  <tr class="active">
    <td><%= link_to municipality.name, municipality_path(municipality) %></td>
    <td><%= municipality.state.state %></td>
    <td><%= municipality.population %></td>
    <% if user_signed_in? %>
      <td><%= link_to 'Show', municipality %></td>
      <td><%= link_to 'Edit', edit_municipality_path(municipality) %></td>
      <td><%= link_to 'Destroy', municipality, method: :delete, data: { confirm: 'Are you sure?' } %></td>
    <% end %>
      <% @forms.each do |form| %>
      <tr>
        <%# if @forms.municipality_id == municipality %>
          <% @forms.each do |form| %>
            <td><%= form.form_name %></td>
          <% end %>  
        <%# end %>
      <% end %>
      <tr>
<% end %>
</div>       

控制器:

  def index
  @states = State.all

  if params[:state_id].present?
   @state = params[:state_id]
   @municipalities = Municipality.where(state_id: @state)
   @forms = Form.where(municipality_id: @municipalities)
 else
   @states = State.all
   @municipalities = Municipality.all
 end

结束

架构:

 create_table "forms", force: :cascade do |t|
t.string   "form_name"
t.string   "form_link"
t.datetime "created_at",      null: false
t.datetime "updated_at",      null: false
t.integer  "municipality_id"
t.integer  "department_id"
end

  add_index "forms", ["department_id"], name:    "index_forms_on_department_id"
  add_index "forms", ["municipality_id"], name: "index_forms_on_municipality_id"

create_table "municipalities", force: :cascade do |t|
  t.string   "name"
  t.integer  "form_id"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.integer  "population"
  t.integer  "state_id"
end

关于如何仅显示与市政当局关联的表格的任何帮助,在他们从下拉列表中 select 状态之后。谢谢!

固定视图,感谢下面的回复

 <%if @state != nil %>
  <% @state.municipalities.each do |municipality| %>
   <tr class="active">
    <td><%= link_to municipality.name, municipality_path(municipality) %></td>
    <td><%= municipality.state.state %></td>
    <td><%= municipality.population %></td>
   </tr>
    <% municipality.forms.each do |form| %>
   <tr>
    <td><%= form.form_name %></td>
   </tr>
   <% end %>
  <% end %>
 <% end %>

您希望一个自治市有多个表单,并且一个表单属于一个自治市。因此,您不应在自治市 table 中定义 form_id。没有一种,而是多种与市政当局相关的形式。

在您的模型中定义关系如下:

state.rb

has_many :municipalities

municipality.rb

belongs_to :state
has_many :forms

form.rb

belongs_to :municipality

然后在您的控制器中使用 @state = State.find(params[:state_id] 加载状态。然后,您可以使用 @state.municipalities.each do |municipality| 遍历表单中的所有城市,并在该块内执行 municipality.forms.each do |form|