6

我在我的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實際發生什麼樣的子類?

回答