如何将参数传递给javascript ajax POST,以便Rails解释它们

How to pass parameters to a javascript ajax POST so that Rails will interpret them?

本文关键字:以便 Rails 解释 POST ajax 参数传递 javascript      更新时间:2023-09-26

在 Rails 3.2 应用程序中,我有一个 coffeescript 函数,其中包含一个 POST 来创建带有附加文件的资产(使用 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]会正确解释上面记录的参数吗?

如何将参数传递给javascript帖子,以便Rails正确解释它们?任何指导都非常感谢,因为我在兜圈子!

从您提供的日志来看,您的 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]asset[parent_id]