実行中の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
私の質問は、どのようになるか、私はビューでデータベースのテーブルと列を表示したいと言いますビューに渡す前にこのデータをバンドルする良い方法です。基本的には、コントローラとビューはどのように見えますか?
私は次のように作ってみたが、これを行うためのより良い方法がない場合、私は驚くだろう。
マイコントローラ:
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 %>
私は、コントローラでこれを使用して周りにもプレイしました:
@database = Database.where(:id => params[:id]).includes(:tables => [:columns])
@databaseからテーブルとカラム名にアクセスしようとすると、私は気が狂ってしまいました。
UPDATE:
一般的に、私はこのアウトを理解しようと多くの時間を費やしていると私はここに投稿した直後、私はそれを得ると思います。提案されたことをありがとう - これは私のために働いた。また、私が最初の方法を使って自分の方法を修正すれば!方法次のように動作します:
コントローラー:
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 %>
私は助けることがうれしいです。あなたの最終ソルに.firstの使用を指摘してくれてありがとう - 私も私のソリューションを更新します。これがなければ、ビューがアソシエーションにアクセスしようとすると、ビュー内の参照は未定義のメソッドエラーをスローします。乾杯! – miked