0

Rails 3.2アプリには、添付ファイル付きのアセットを作成するためのPOSTを含むcoffeescript関数があります(Carrierwaveを使用)

link = url_to_file
parent = $('#dom_obj').data('id')
$.post( url, { remote_file_url: link, parent_id: parent } )

これにより、次のログが得られます。

Started POST "/assets" for 127.0.0.1 at 2013-10-05 14:53:57 +0700
Processing by AssetsController#create as JS
  Parameters: {"remote_file_url"=>"https://the/correct/path", "parent_id"=>"520"}

コントローラーで

@asset = Asset.new(params[:asset])
@asset.save

アセットを作成する他の方法がいくつかありますが、それらはすべて正常に機能します。この ajax 呼び出しに渡される変数も正しいです。しかし、@asset.save は、parent_id が正しく設定されていないことを意味するアップローダーのエラーが原因で失敗しています。

このすべてのコンポーネントは他のアップロード経路を介して完全に機能するため、私の唯一の結論は、jquery ajax 呼び出しが正しくないということです。パラメーターを正しく設定していないと思います (私のコントローラーの params[:asset] はパラメーターを正しく解釈しますか?上に記録されていますか?)。

Railsがパラメータを正しく解釈するように、パラメータをjavascriptポストに渡す方法は? 私はぐるぐる回っているので、どんなガイダンスも大歓迎です!

4

1 に答える 1

1

あなたが提供したログから、あなたの POST 呼び出しによって提供される params[:asset] と呼ばれるものはありません。したがって、コントローラーでそれを行うことはうまくいくでしょう

@asset = Asset.new(params)
@asset.save

または、これが機能しない場合は、試すことができます

@asset = Asset.new(:remote_file_url => params[:remote_file_url], :parent_id => params[:parent_id])
@asset.save

または別の解決策は、コントローラーを変更せずに、html のフォーム入力名をasset[remote_file_url]andに変更することですasset[parent_id]

于 2013-10-05T08:11:46.853 に答える