我是ror的新手。我有2个表用于组(称为'ab')和子组(称为'cd')。每个组有几个子组。我已经定义了belongs_to和has_many关系。
模型ab.rb
class Ab < ActiveRecord::Base
has_many:cds
end
模型cd.rb
class Cd < ActiveRecord::Base
belongs_to :ab
end
ab和cd有2列,每列名为title和Dscr。我必须创建一个连接表(ab_cd_join_table)
我想在视图中显示特定组及其子组。
视图的控制器
class DisplayController < ApplicationController
def index
@ab = Ab.find_by_title("XXXXXX")
@cds = @ab.cds
for cd in @cds
logger.info cd.title
end
我在视图中使用它。
显示视图
<%= @ab.title %>
我不知道如何显示属于该组的不同子组的标题和Dscr =“XXXXXX”
提前致谢
答案 0 :(得分:0)
我认为你所要求的是这一点:
<% @ab.cds.each do |cd| %>
<h1><%= cd.title %></h1>
<p><%= cd.description %></p>
<% end %>
这在控制器中:
@ab = Ab.find_by_title("XXXXXX")
这样你就会显示匹配“XXXXXX”的ab模型的所有cds。
<强>更新强> 对于belongs_to和has_many来说,使用belongs_to的模型需要有一个具有has_many的列。在这种情况下,Cd需要有一个名为ab_id的列。
rails g migration add_ab_id_to_cds ab_id:integer
cd.ab_id需要是相应Ab模型的id。
cds = Cd.where(<something>)
cds.each do |cd|
cd.ab_id = @ab.id
cd.save
end
这可能应该在创建Cd对象时设置,但只是为了测试它你可以这样做。
答案 1 :(得分:0)
我是否必须创建连接表(ab_cd_join_table)
在这种情况下,您不需要连接表,而是需要添加 cds表中的ab_id列。(外键列应该出现在 定义belongs_to assiciation的模型表)
在视图中显示子组标题
<% @ab.cds.each |sub_group| %>
<%= sub_group.title -%>
<%= sub_group.description -%>
<%end%>
另外,如果你需要带有group的sub_groups,那么在find中使用include选项将它们加载到一个查询中
@ab = Ab.find_by_title("XXXXXX",:include=> :cds)
现在你不需要明确地计算cds只需使用上面提到的视图代码