gpt4 book ai didi

ruby-on-rails - 嵌套关联,如何为 View 、 rails 准备变量

转载 作者:行者123 更新时间:2023-12-04 12:49:01 24 4
gpt4 key购买 nike

运行 Rails 3.1.3...

我将使用嵌套关联的一个简单示例(不确定这是否正确)。基本上我正在建模数据库 - 每个数据库都有自己的表,每个表都有自己的列:

class Database < ActiveRecord::Base
has_many :tables
end

class Table < ActiveRecord::Base
belongs_to :database
has_many :columns
end

class Column < ActiveRecord::Base
belongs_to :table
end

我的问题是,假设我想在 View 中显示数据库的表和列,在将数据传递给 View 之前捆绑这些数据的好方法是什么。基本上,我的 Controller 和 View 会是什么样子?

我想出了以下内容,但如果没有更好的方法来做到这一点,我会感到惊讶:

我的 Controller :
class DatabasesController < ApplicationController
def show
@database = Database.find_by_id(params[:id])
@tables = @database.tables
@columns = @database.tables.columns
end
end

我的观点:
Database: <%= @database.database_name %><br />
<% @tables.each do |table| %>
Table: <%= table.table_name %><br />
<% table.columns.each do |column| %>
Column: <%= column.column_name %><br />
<% end %>
<% end %>

我也在 Controller 中尝试过使用它:
@database = Database.where(:id => params[:id]).includes(:tables => [:columns])

然而,试图从@database 访问表名和列名让我很生气。

更新:

通常,我花了很多时间试图弄清楚这一点,在我在这里发帖后不久,我想我明白了。感谢 miked 的建议 - 这对我有用。另外,如果我使用第一个修改我自己的方法!方法如下:

Controller :
def show
@database = Database.where(:id => params[:id]).includes(:tables => [:columns]).first!
end

查看:
Database: <%= @database.database_name %><br />
<% @database.tables.each do |table| %>
Table: <%= table.table_name %><br />
<% table.columns.each do |column| %>
Column: <%= column.column_name %><br />
<% end %>
<% end %>

最佳答案

除非我遗漏了一些东西,否则这对我来说实际上看起来没问题,尽管您不需要 Controller 中的 @tables 和 @columns,除非您真的将它们用于 View 中的某些内容。

Controller :

class DatabasesController < ApplicationController
  def show
    @database = Database.find(params[:id], :include=>{:tables => [:columns]}) #eager load
    #or: @database = Database.where(:id => params[:id]).includes(:tables => [:columns]).first #eager load
#or: @database = Database.find(params[:id]) #queries will be executed in the view
  end
end

看法:
Database: <%= @database.database_name %><br />
<% @database.tables.each do |table| %>
  Table: <%= table.table_name %><br />
  <% table.columns.each do |column| %>
    Column: <%= column.column_name %><br />
  <% end %>
<% end %>

关于ruby-on-rails - 嵌套关联,如何为 View 、 rails 准备变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9129714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com