6

Tôi đã có một thiết lập đơn giản (tôi nghĩ) kế thừa bảng (STI) đơn giản trong ứng dụng Rails của tôi.Rails form_for sử dụng lớp cơ sở STI

Có mô hình Người dùng có tài nguyên lồng nhau Đăng. Sử dụng STI, tôi có nó để một số Bài đăng có thể được Đăng :: Đối tượng khẩn cấp.

Tôi nhận thấy rằng những người trợ giúp URL của tôi như <%= [@user, @post] %> cần phải được mã hóa cứng thành <%= user_post_path[@user, @post] %> hoặc nếu không tôi sẽ thấy lỗi về Rails không tìm thấy phương pháp user_post_urgent_path. Được rồi, đó là hợp lý dễ dàng.

(Một cách khác để làm điều này cũng là <%= [@user, post: @post] %>.)

Vâng, đối với một số lý do tôi không thể tìm ra cách để làm cho form_for phương pháp điều chỉnh trong cùng một cách. Khi tôi viết chỉ đơn giản là

<%= form_for [@user, @post] do |f| %> 

, tôi gặp lỗi tương tự với trường hợp trợ giúp URL, nhưng trong ngữ cảnh biểu mẫu: undefined method 'user_post_urgen_path'.

tôi cố định này bằng cách xác định:

<%= form_for [@user, @post], url: :user_post do |f| %> 

Nhưng điều này không hoàn toàn làm việc, bởi vì khi tôi đi đến gửi biểu mẫu, tôi nhận được vấn đề trong điều khiển của tôi, nói rằng thông số mạnh mẽ dòng params.require(:post) thất bại:

param is missing or the value is empty: post 

Nếu tôi kiểm tra việc params tôi thấy rằng các mẫu được đi qua một đối tượng post_urgent và không phải là một đối tượng post.

Tôi có thể, tất nhiên, đặt thủ công vào một số logic luôn nói if !params[:post] and params[:post_urgent], then params[:post] = params[:post_urgent]. Nhưng điều đó có vẻ như cách quá hacky, đặc biệt là đối với Rails.

Có cách nào tốt hơn để tạo biểu mẫu như thế này "chỉ công việc" bất kể lớp con của mô hình Bài đăng thực sự xảy ra phải không?

Trả lời

Các vấn đề liên quan