我正在尝试创建具有以下强参数的模型“ Post”的实例:
private
def post_params
params.require(:post).permit(:name, {images: []})
end
在我的表单中,这就是将文件上传到post_params["images"]
并因此上传到post.images
的方式:
<%= f.file_field :images, multiple: true %>
但是我想对上载按钮应用自定义样式,因此我使用HTML构建样式。但是我不知道要提供输入的name
属性是什么,以便将其包含在post_params
中。这是我尝试过的:
<input name="images" type="file" multiple="true"/>
<input name="post[images]" type="file" multiple="true"/>
<input name="post['images']" type="file" multiple="true"/>
<input name=":images" type="file" multiple="true"/>
但是他们都只是去params["post"]["images"]
,而不是strong_params
。
我可以给HTML输入什么名称,使其包含在强大的参数中?
答案 0 :(得分:1)
类似这样的东西:
<input multiple="multiple" name="post[images][]" id="posts_images" type="file">
这应该生成您的控制器期望的正确JSON参数。它可能与哈希/数组的多个级别混淆。这就是为什么我在上面的评论中提到的在浏览器中使用inspect element
来查看Rails生成的内容的原因,然后可以构建自定义样式的元素来满足自己的需求。
一种记住它的方法是:require
进入post
,然后寻找键为images
并且值为array
的哈希。这样,就更容易知道在何处使用单数或复数,关键是什么等。因此,将其语法映射为:
<model name>[<key defined in strong params>][]
在.erb
版本的中,如果您查看表单的顶部,请考虑f
中... do |f|
的值。在那儿,它获得控制器名称post
(单数),然后在:images
中为其赋予方法名称file_field
(复数)。根据Rails Docs的说法,您可以使用单数:image
,但复数对我来说似乎更正确。