Koşu Rails 3.1.3 ...İçiçe dernekler, görünümler için değişkenleri nasıl hazırlanacağını,
(bu doğru terim olup olmadığından emin değil) Ben iç içe derneklerin basit bir örnek kullanacağız raylar. Temelde ben veritabanlarını modelleme ediyorum - Her veritabanı kendi tabloları vardır ve her tablo, kendi sütun vardır:
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
, bir görünümde bir veritabanının tablo ve sütunları görüntülemek istediğinizi varsayalım edilir Sorum, bir ne olurdu Bu verileri görüntülemeye geçmeden önce bu şekilde paketlemenin iyi bir yolu. Temel olarak, denetleyicim ve görünümü neye benziyordu?
Ben aşağıdaki ile geldim, ama bunu yapmanın çok daha iyi bir yolu yoktur eğer sürpriz olacaktır:
Benim denetleyicisi:
class DatabasesController < ApplicationController
def show
@database = Database.find_by_id(params[:id])
@tables = @database.tables
@columns = @database.tables.columns
end
end
Benim görünümü:
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 %>
Ben de denetleyicisi bu kullanarak etrafında oynadım:
@database = Database.where(:id => params[:id]).includes(:tables => [:columns])
Ancak, tabloya erişmeye çalışırken @database ve sütun adları beni yönlendirdi.
GÜNCELLEME:
Genellikle, ben bu anlamaya ve burada yazılan kısa bir süre sonra, ben anladım düşünmeye çalışıyorum saatlerce geçirdim. Öneri için teşekkürler - bu benim için çalıştı. Ayrıca, ilk adımı kullanarak kendi yöntemimi değiştirirsem! o kadar çalışır yöntem aşağıdaki gibidir:
Denetleyici:
def show
@database = Database.where(:id => params[:id]).includes(:tables => [:columns]).first!
end
Görünüm: Eğer don olsa
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 %>
sevindim. Son sol'nuzda .first kullanımını işaretlediğiniz için teşekkür ederim. Çözümümü de güncelleyeceğim. Bu olmadan, görünümdeki ilişki, ilişkilendirmeyi ilişkilendirmeye çalıştığında tanımlanmamış bir yöntem hatası atar. Şerefe! – miked