Whew - rất nhiều dự án được gói gọn trong phần này và tôi đã thực hiện một số tìm kiếm (rộng rãi) để không có kết quả, vì vậy hãy ném một ngọn lửa để xem có ai khác đang làm việc với một ngăn xếp tương tự và có giải pháp hay không.Mongoid embeds_many/embedded_in quan hệ với Formtastic trong ActiveAdmin ...?
Tôi đang sử dụng Mongoid-enabled fork of ActiveAdmin để tạo giao diện quản trị cho ứng dụng Rails 3.
ActiveAdmin (xây dựng biểu mẫu của nó bằng Formtastic) có vẻ như đang được phát hành cho đến thời điểm này. Nhưng tôi đã gặp rắc rối khi cố gắng sử dụng ngăn xếp này với quan hệ embeds_many
và embedded_in
của Mongoid. Tôi đang cố gắng trở thành một công dân tốt và sử dụng kỹ thuật mô hình dữ liệu thích hợp với Mongo, nhưng Formtastic dường như không muốn chơi cùng.
Tôi sẽ chia sẻ lỗi cụ thể mà tôi nhận được, mặc dù nó có thể là bí truyền.
Nếu tôi không thể tìm ra giải pháp tốt, tôi sẽ hút nó và chỉ sử dụng has_many
và belongs_to
, mặc dù tôi biết tôi sẽ từ bỏ lợi ích chính của MongoDB (ứng dụng sẽ không đủ lớn để có sự thiếu tham gia/nhiều truy vấn là một vấn đề, nhưng tôi đã nghĩ tôi sẽ làm mọi thứ đúng cách ngay từ đầu!).
class Location
include Mongoid::Document
embeds_many :events
field :venue_name, type: String
end
class Event
include Mongoid::Document
embedded_in :location
field :event_name, type: String
end
ActiveAdmin.register Event do
form do |f|
f.inputs do
f.input :event_name
f.input :location, :as => :select
end
f.buttons
end
Nó nghẹt thở trên dòng f.input :location
và ném:
ActionView::Template::Error (undefined method `event_id' for #<Event:0x007fa4224a20e0>):
1: insert_tag renderer_for(:new)
Tôi đã thay đổi :as => :select
-:as => :check_boxes
và thực sự đã nhận nó để hiển thị các địa điểm chính xác (mặc dù như hộp kiểm, không phải là một lựa chọn hoặc radio). Nhưng khi nộp mẫu đơn, tôi sau đó chào đón với một:
Mongoid::Errors::NoParent (
Problem:
Cannot persist embedded document Event without a parent document.
)
Trong quá trình tìm việc nộp liệu, nó đang cố gắng để gửi lựa chọn của tôi là "EVENT_ID" thay vì id của tài liệu gốc (vị trí).
Dù sao - ruột của tôi là tôi đang cố gắng để vừa với một cái chốt vuông vào một lỗ tròn ở đây, nhưng nếu bất cứ ai khác có bất kỳ suy nghĩ, họ sẽ được đánh giá cao.