0

ポリモーフィックであり、マイクロポストの下にもネストされているタグモデルがあります(ユーザーがマイクロポストとタグの両方を同じ「フォーム」で送信できるようにするため)。

これまでのところ、フォームは正常に送信され、マイクロポストが保存され、タグがタグ テーブルに保存されます。

ただし、私がやりたいのは、タグ text_field (以下の「ジョブ、エンジニアリング」と表示されている場所) で送信されたものをすべて別々のタグに分割し、それを split(", ") で分割することです

送信ボタンをクリックしたときの POST コンソール出力は次のとおりです。

Parameters: {"utf8"=>"✓", "authenticity_token"=>"T/GieqxRM7Kxl2jmC7hr3KPixM/jVG4pdMi/ceb1Vq0=", "micropost"=>{"content"=>"This is a post", "tags_attributes"=>{"0"=>{"name"=>"jobs, engineering"}}}, "commit"=>"Post"}

マイクロポストコントローラーの「Create」メソッドに書き込むためにこれを行う最善の方法はありますか(もしそうなら、誰かが私を正しい方向に向けることができますか)?

(注: 関連する質問があったのを見ましたが、HAML を使用していると思われるため、フォローしませんでした)

0また、なぜハッシュキーとして表示されるのかわかりません。これを下に置いたからかもしれないと思うのform_for(@micropost)ですが、入れないとタグのtext_fieldが消えてしまいます。

% @micropost.tags.build %
4

1 に答える 1

0

まず、ハッシュ tags_attributes は、ネストされたリソースであるため、ハッシュ キーとして 0 から始まります。複数のネストされたモデルが同時に送信された場合、次のように表示されます。

"tags_attributes" => { "0" => {...}, "1" => {...} }

これにより、ネストされた各レコードのデータがまとめられ、ハッシュを反復処理して、送信された数のレコードを作成します。

次に、送信された params ハッシュを取得し、探している形式で新しいハッシュを返す before_filter を使用して問題を解決します。次のようなもの:

before_filter :new_params, only: [:create, :update]


private

def new_params
  params["tags_attributes"].each do |key, value| 
    value["name"] = value["name"].split(", ") }
  end
  params
end
于 2013-01-22T06:08:38.343 に答える