Tôi muốn hiểu cách "thích hợp" để khởi tạo các trường lồng nhau của một mô hình.Cách thích hợp để khởi tạo các trường lồng nhau trong các dạng Rails
Hãy nói rằng bạn có một số các trường lồng nhau cho một mô hình:
class User
has_one :address
accepts_nested_attributes_for :address
end
Và bạn cần phải khởi tạo những thuộc tính (address
trong trường hợp này) để sử dụng chúng trong một cuộc gọi fields_for
.
Cho đến nay tôi đã nghĩ đến ba cách để thực hiện việc này.
Thứ nhất, after_initialize
móc trên mô hình:
class User
after_initialize :init_address
protected
def init_address
address ||= build_address
end
Sau đó, chúng tôi có khởi trong bộ điều khiển:
class UsersController
def new
@user = User.new
@user.build_address
end
end
Và cuối cùng, chúng ta có thể có một phương pháp helper để làm điều đó cho chúng ta:
module FormHelpers
def setup_user(user)
user.address ||= user.build_address
user
end
end
# view
<%= form_for setup_user(@user)... %>
Có điều gì giống như tiêu chuẩn hay "thực hành tốt nhất" cho lần thứ là kịch bản? Làm thế nào để bạn làm điều đó và tại sao?
Trong việc thiếu một giải pháp tốt hơn, tôi đã kết thúc bằng văn bản một đá quý mà sẽ chăm sóc này: https://github.com/febuiles/auto_build –
Hình như một bài cũ. Bạn đang sử dụng phiên bản Rails nào? –