我有一个rails应用程序,其中有三个模型:表,列和行。它们看起来像这样:
表:
has_many :columns
accepts_nested_attributes_for :columns
柱:
belongs_to :table
has_many :rows
accepts_nested_attributes_for :rows, :reject_if => lambda { |b| b[:data].blank? }
行:
belongs_to :column
我试图制作一张像我之前回答中描述的那样的桌子:Creating a spreadsheet。为了实现它,我有两个控制器:一个TablesController和一个RowsController(Rows控制器应该被称为不同的东西,因为它包含行和列)。我有嵌套路由,所以你可以访问/ tables / 1 / rows,它会显示与第一个表相关联的列。
以下是代码:
@columns = Column.where(:table_id => @table.id)
@rows = Row.all
和
<% @columns.each do |column| %>
<% @rows.each do |row| %>
Column name:<%= column.name %><br>
Row data: <%= row.data %><br>
<hr>
<% end %>
<% end %>
如您所见,行返回整个数据库中的所有结果。但我无法弄清楚如何让它们与它们所在的列对应?
感谢您的帮助!
答案 0 :(得分:1)
从以下位置更新您的控制器代码:
@columns = Column.where(:table_id => @table.id)
@rows = Row.all
为:
@columns = Column.where(:table_id => @table.id)
然后在你看来:
<% @columns.each do |column| %>
<% column.rows.each do |row| %>
Column name:<%= column.name %><br>
Row data: <%= row.data %><br>
<hr />
<% end %>
<% end %>
因为你有@rows = Rows.all
,它将返回rows
表中的所有行。要为特定rows
检索column
,您需要执行column.rows
。