我在我的Rails應用中設置了一個非常簡單的(我認爲)單表繼承(STI)設置。Rails form_for使用STI基類
存在具有嵌套資源Post的用戶模型。 使用STI,我有它,以便某些職位可以是Post :: Urgent對象。
我注意到我的URL助手像<%= [@user, @post] %>
需要硬編碼到<%= user_post_path[@user, @post] %>
否則我最終會看到有關Rails找不到user_post_urgent_path
方法的錯誤。好的,這很容易。
(這樣做的另一種方法也<%= [@user, post: @post] %>
)
那麼,由於某種原因,我無法弄清楚如何使form_for
方法以同樣的方式進行調整。當我寫簡單的
<%= form_for [@user, @post] do |f| %>
,我得到類似的錯誤的URL幫手的情況下,但在形式方面:undefined method 'user_post_urgen_path'
。
我解決了這個問題,通過指定:
<%= form_for [@user, @post], url: :user_post do |f| %>
但是,這並不完全工作,因爲當我去提交表單,我得到了我的控制器的問題,他說,強大的參數行params.require(:post)
失敗:
param is missing or the value is empty: post
如果我檢查params
我覺得形式傳遞post_urgent
對象,而不是post
對象。
我當然可以手動輸入一些總是說if !params[:post] and params[:post_urgent], then params[:post] = params[:post_urgent]
的邏輯。但是,似乎方式太hacky,特別是對於Rails。
有沒有更好的方式來製作這樣的表格「只是工作」,而不管Post實際發生什麼樣的子類?