6

私は、Railsアプリケーションでかなりシンプルな(STI)単一テーブル継承(STI)設定を持っています。STI基底クラスを使用するRails form_for

ネストされたリソースポストを持つユーザーモデルがあります。 STIを使用して、いくつかの投稿がPost :: Urgentオブジェクトになるようにしました。

<%= [@user, @post] %>などのURLヘルパーが<%= user_post_path[@user, @post] %>にハードコードされている必要があることがわかりました。そうしないと、user_post_urgent_pathメソッドが見つからないというRailsのエラーが表示されてしまいます。それはかなり簡単でした。

(これを行うための別の方法も<%= [@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オブジェクトpost_urgentオブジェクトを渡すとされていないことがわかります。

私は、もちろん手動で常にif !params[:post] and params[:post_urgent], then params[:post] = params[:post_urgent]というロジックを手動で入力できます。しかし、それはちょうどのようですあまりにもハッキー、特にレールです。

ポストモデルのサブクラスに関係なく、このようなフォームを作成するより良い方法はありますか?あなたは既に解決策を見つけたが、私は自分のフォームのために、次を使用していた場合

答えて

関連する問題