我需要制作一个可以处理创建同一模型的多个记录的表格,并以通过Rails的“强参数”的方式提交信息。在前端,我为小狗的名称和品种动态添加了两个新的文本字段,并希望将它们全部保存到表单中。但是我很难通过Strong Params传递一系列小狗的名字和品种。
Puppy的未知属性“ puppies”
我认为这很简单,我忽略了。请帮助生成这些小狗!
new.html.erb
<%= form_tag puppies_path do %>
<%= text_field_tag “puppies[puppies][]puppy[name]” %>
<%= text_field_tag “puppies[puppies][]puppy[breed]” %>
<%= submit_tag “Add Puppy” %>
<% end %>
生成这些参数
"puppies"=>{"puppies"=>[{"puppy"=>{"name"=>"ribbon", "breed"=>"poodle"}}]}
和控制器中的“强参数”
class PuppiesController < ApplicationController
def index
@puppies = Puppy.all
end
def new
end
def create
puppies_array = puppies_params[:puppies].each do |puppy|
puppy[:puppy]
end
Puppy.create(puppies_array)
end
def show
@puppy = Puppy.find(params[:id])
end
private
def puppies_params
params.require(:puppies).permit({
puppies: [
puppy: [
:name,
:breed
]
]
})
end
end
有什么主意我想念的吗?
我想通过的伪代码:
[((名称,品种),(名称,品种),(名称,品种)]
答案 0 :(得分:1)
您尚未添加其余的控制器代码,但我假设您使用的是类似Puppy.create(puppies_params)
但是,由于要在视图中嵌套参数,因此将需要使用Puppy.create(puppies_params[:puppies])
以确保能够传递正确的名称数组并进行create
操作。
修改 由于puppies数组包含带有键值的哈希值,因此我们需要提取这些值以获得最终的puppy属性数组。
def create
puppies_array = puppies_params[:puppies].collect do |puppy|
puppy[:puppy]
end
Puppy.create(puppies_array)
end
下面我的评论有一个设置小狗数组的简写,您可以使用对您而言更易读和理解的任何版本
答案 1 :(得分:0)
要获取所需的属性数组,可以执行以下操作:
puppies_array = puppies_params[:puppies][:puppy].map{|puppy| puppy.values}
这将在小狗参数中获取哈希puppies
,并在puppy
中获取哈希数组,然后仅获取该数组中哈希的值部分。
您将获得伪代码结果。
有关信息,请注意,映射块中的puppy
没有特殊意义……它仅表示数组的实例。您可以轻松完成
puppies_array = puppies_params[:puppies][:puppy].map{|some_dog| some_dog.values}