ruby-on-rails - 为什么我的参数为零?
问题描述
我有一个使用 jQuery 提交的表单:
<form data-type="html" novalidate="novalidate" id="free_circuit_form" class="new_experiment" action="/en/experiments" accept-charset="UTF-8" method="post">
<input name="utf8" type="hidden" value="✓" />
<input type="hidden" name="authenticity_token" value="+0BPI4JbryN/WVCGrA0OxZNIteXb0p01XZJsxVtW9qYFIxt0EgQ6OJ2rDpaTmQwlVPe9a/qlwEteHvnjWbysOw==" />
<input type="hidden" id="experiment_not_signed_in_circuit_data" name="experiment[not_signed_in_circuit_data]"/>
</form>
但是当我访问params
控制器内部时,我明白了nil
!不应该params
包含我用表单发送的所有参数吗?
在实验控制器中,我允许参数为:
def experiment_params
params.require(:experiment).permit(: not_signed_in_circuit_data, :title, :circuit, :intro_text, :public, :meta_description, :thumbnail => [:data], :descriptions_attributes => [:id, :data, :title, :position], :circuits_attributes => [:id, :data, :title, :position, :circuit_types])
end
任何想法?
编辑
这是我尝试使用应用程序控制器放置操作后的请求服务器日志:
Started POST "/en/not_signed_in_circuit" for 127.0.0.1 at 2018-05-12 18:38:24 +0300
Processing by ApplicationController#not_signed_in_circuit as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"tNwIjklA9Ic3u7jOpMJUSPPd8lDmKkZTppG0UvQuBchKv1zZ2R9hnNVJ5t6bVlaoNGL63sddGy2lHSF09sRfVQ==", "experiment"=>{"not_signed_in_circuit_data"=>"{\"public\":false,\"title\":\"abc\",\"circuits\":[{\"circuit\":\"0\",\"text\":\"\"}]}"}, "locale"=>"en"}
我可以在日志中看到参数,但在动作内部,params
是nil
解决方案
您的表单有点奇怪,您可能没有使用 Rails 表单助手,例如form_for
. 但实际上你有一个命名问题。
您的所有表单输入元素都应根据您的模型命名,例如:
- 实验[某事]
- 实验[其他]
- 实验[其他]
在您的情况下,只有 3 个输入
utf8
:authenticity_token
和experiment[not_signed_in_circuit_data]
所以实际上只有一个参数与您的模型相关联。
您可以使用 : 访问控制器中的此参数params[:experiment][:not_signed_in_circuit_data]
。所以这是正常的,您无法访问与实验模型相关的其他参数(如标题、电路)
有趣的是,当我们查看日志时,我们可以在params[:experiment][:not_signed_in_circuit_data]
. 您可以像这样访问它们:params[:experiment][:not_signed_in_circuit_data][:title]
或params[:experiment][:not_signed_in_circuit_data][:public]
。好像多了一层嵌套。。
我建议你简化你的表单,并让每个输入字段的名称都像experiment[title]
etc ...
推荐阅读
- android - 丢失片段更改的数据
- javafx - 无法获取文本字段输入 [JavaFX]
- python - 在 str 对象上使用 'to_datetime' - 为了更改数据框列名
- go - GoConvey 自定义断言未按预期工作
- c# - multipart/form-data post api 在 hcloud 上不起作用
- c++ - 每个线程使用 boost::asio::deadline_timer 不起作用
- apache-kafka - Ksql:左连接显示流中的列但不显示表
- python - 如何获取数据并将数据发送到 mLab
- javascript - javascript 只允许制表符、退格键和数字键
- angular - 如何更改打字稿中的弹出窗口配置?