Ok, vì vậy tôi nghĩ rằng tôi hiểu cách các đặc tả mối quan hệ hoạt động trong đường ray nhưng tôi đã đấu tranh với điều này trong một ngày.tham chiếu thuộc tính trong các mô hình với các mối quan hệ thuộc về thông qua một không gian tên lồng nhau
Một số ngữ cảnh, tôi có hai kiểu Ôtô & Tên mẫu (ví dụ: Impala, Bộ sạc, vv), nơi Ô tô là trường hợp Tên mẫu và Tên mẫu thực sự không gì khác ngoài bảng tra cứu Tên mẫu và một số mẫu khác thuộc tính mức. Bộ điều khiển Model Name được lồng trong vùng tên quản trị vì chỉ có các quản trị viên mới có thể sử dụng tên mô hình CRUD. Người dùng cuối có thể thêm phiên bản ô tô vào mẫu Ô tô.
Vì vậy, trong routes.rb tôi có:
resources :cars
namespace :admin do resources :model_names end
của mẫu được định nghĩa là:
class Admin::ModelName < ActiveRecord::Base
end
class Car < ActiveRecord::Base
belongs_to :admin_model_name
end
Các Migrations là:
class CreateCars < ActiveRecord::Migration
def self.up
create_table :cars do |t|
t.string :chassis_number
t.string :description
t.references :admin_model_name
t.timestamps
end
end
class CreateAdminModelNames < ActiveRecord::Migration
def self.up
create_table :admin_model_names do |t|
t.string :model
t.integer :sort_index
#...additional attributes removed
t.timestamps
end
Các admin CRUD của ModelName tất cả làm việc tuyệt vời. Vấn đề ở chế độ xem Ô tô. Tôi nghĩ rằng tôi nên tham khảo một tên mô hình chiếc xe cụ thể như ví dụ:
<%= @car.admin_model_names.Model =>
Nhưng tôi nhận được lỗi:
undefined method `admin_model_names' for #<Car:0x000001040e2478>
Tôi đã thử các attr_accessible trên mô hình ModelNames nhưng vô ích. Dữ liệu cơ bản được tham chiếu chính xác. Tôi cũng có mối quan hệ HABTMT giữa Ô tô & Người dùng và tất cả đều làm việc tốt khi tham chiếu từng thuộc tính khác từ các chế độ xem đối tượng khác nhau. Nhưng không thể làm được điều này. Có phải do tài nguyên lồng nhau & quyền kiểm soát quản trị viên không?
Phương pháp tham khảo duy nhất tôi thấy rằng làm việc là:
<%= Admin::ModelName.find(@car.admin_model_name_id).model %>
Nhưng điều này thực sự có vẻ là quá nhiều mã (và chi phí của một phát hiện) để có được thuộc tính đó. Có một cách Rails?
Xin cảm ơn trước.
Scott
Tôi không thể nhận xét ... vì vậy đây thực sự là tôi không giả vờ trả lời ... nhưng đối với những gì tôi thấy không nên gọi @car "admin_model_name" ... ở dạng số ít? – Daniel
Có, bạn là chính xác. Tôi đã thử nhiều biến thể và dán trong mã từ một trong những 'cũng cho phép xem nếu điều này hoạt động'. Với nó trong số ít như <% = @ car.admin_model_name.Model%> Tôi nhận được uninitialized xe liên tục :: AdminModelName – Scott