Chạy đường ray 3.1.3 ...Liên kết lồng nhau, cách chuẩn bị biến cho chế độ xem, đường ray
Tôi sẽ sử dụng ví dụ đơn giản về các liên kết lồng nhau (không chắc chắn đây có phải là cụm từ chính xác) hay không. Về cơ bản tôi đang mô hình cơ sở dữ liệu - mỗi cơ sở dữ liệu có bảng riêng của mình và mỗi bảng có các cột riêng của mình:
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
Câu hỏi của tôi là, nói rằng tôi muốn hiển thị bảng và cột của một cơ sở dữ liệu trong một cái nhìn, những gì sẽ là một cách tốt để nhóm dữ liệu này trước khi chuyển dữ liệu đến chế độ xem. Về cơ bản, bộ điều khiển và chế độ xem của tôi trông như thế nào?
tôi đã đi lên với những điều sau đây, nhưng tôi sẽ ngạc nhiên nếu không có một cách tốt hơn để làm điều này:
điều khiển của tôi:
class DatabasesController < ApplicationController
def show
@database = Database.find_by_id(params[:id])
@tables = @database.tables
@columns = @database.tables.columns
end
end
Quan điểm của tôi:
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 %>
tôi cũng chơi xung quanh với việc sử dụng này trong bộ điều khiển:
@database = Database.where(:id => params[:id]).includes(:tables => [:columns])
Tuy nhiên việc cố truy cập tên bảng và cột từ @database đã khiến tôi phát điên.
UPDATE:
Thông thường, tôi đã dành nhiều giờ cố gắng để con số này ra và ngay sau khi tôi gửi ở đây, tôi nghĩ rằng tôi nhận được nó. Cảm ơn vì đề xuất đã thích - điều này đã hiệu quả đối với tôi. Ngoài ra, nếu tôi sửa đổi phương pháp của riêng mình bằng cách sử dụng phương pháp đầu tiên! phương pháp nó hoạt động như sau:
Bộ điều khiển:
def show
@database = Database.where(:id => params[:id]).includes(:tables => [:columns]).first!
end
Xem:
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 %>
Vui mừng tôi có thể giúp. Cảm ơn bạn đã chỉ ra việc sử dụng .first trên sol'n cuối cùng của bạn - Tôi cũng sẽ cập nhật giải pháp của mình. Không có nó, tham chiếu trong khung nhìn sẽ ném một lỗi phương thức không xác định khi khung nhìn cố gắng truy cập (các) liên kết. Chúc mừng! – miked