如何将数组从表单传递到控制器方法?
How to pass an array from a form to a controller method?
我有一个编辑表单,我在其中构建了一个数字数组。当我点击提交时,我会做“:method => :sort”。我该怎么做才能让我的控制器中的排序方法可以使用数组。编辑表单在 haml 中完成。
还有很多解决方案,但我更喜欢这个:
在表单用于添加的模型中:
attr_accessor :order_ids
现在在 haml 代码中,即在表单中添加:
%input{name: "model_name[order_ids][]", type: "hidden", value: order}
并且在控制器中:
params[:model_name][:order_ids]
你应该得到数组。只需将 model_name
更改为您的模型名称即可。
为什么要发送:
= f.submit "Save Changes", :method => :sort
排序方法。这是不正确的。如果您想将表单发送到控制器中的操作 sort
,则需要在 form url
中指定
假设您在 lists_controller
中有一个名为 sort
的操作,并且在您的路由中将其定义为:
put '/sort', to: 'lists#sort', as: list_sort
然后在表格中你可以这样写:
= form_for @list, :html => { :method => :put, :multipart => true, url: list_sort_path } do |f|
希望这对您有所帮助。
我有一个编辑表单,我在其中构建了一个数字数组。当我点击提交时,我会做“:method => :sort”。我该怎么做才能让我的控制器中的排序方法可以使用数组。编辑表单在 haml 中完成。
还有很多解决方案,但我更喜欢这个:
在表单用于添加的模型中:
attr_accessor :order_ids
现在在 haml 代码中,即在表单中添加:
%input{name: "model_name[order_ids][]", type: "hidden", value: order}
并且在控制器中:
params[:model_name][:order_ids]
你应该得到数组。只需将 model_name
更改为您的模型名称即可。
为什么要发送:
= f.submit "Save Changes", :method => :sort
排序方法。这是不正确的。如果您想将表单发送到控制器中的操作 sort
,则需要在 form url
假设您在 lists_controller
中有一个名为 sort
的操作,并且在您的路由中将其定义为:
put '/sort', to: 'lists#sort', as: list_sort
然后在表格中你可以这样写:
= form_for @list, :html => { :method => :put, :multipart => true, url: list_sort_path } do |f|
希望这对您有所帮助。