模型对应另一个模型

时间:2013-12-23 23:03:29

标签: ruby-on-rails ruby-on-rails-4

我有一个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 %>

如您所见,行返回整个数据库中的所有结果。但我无法弄清楚如何让它们与它们所在的列对应?

感谢您的帮助!

1 个答案:

答案 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