添加仅与前一行关联的行
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|
我有一个 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|