私は、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]
というロジックを手動で入力できます。しかし、それはちょうどのようですあまりにもハッキー、特にレールです。
ポストモデルのサブクラスに関係なく、このようなフォームを作成するより良い方法はありますか?あなたは既に解決策を見つけたが、私は自分のフォームのために、次を使用していた場合