【问题标题】:How can I include an HTML input in rails strong params?如何在 rails strong params 中包含 HTML 输入?
【发布时间】:2018-08-19 17:53:52
【问题描述】:

我正在尝试使用如下所示的强参数创建模型“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 输入提供什么名称以便将其包含在强参数中?

【问题讨论】:

  • 如果您使用erb 版本,则在浏览器中右键单击-> 检查元素。您应该看到它正在生成什么名称。然后你可以手动使用它。

标签: html ruby-on-rails ruby input strong-parameters


【解决方案1】:

类似这样的:

<input multiple="multiple" name="post[images][]" id="posts_images" type="file">

这应该会生成您的控制器所期望的正确 JSON 参数。它可能会与哈希/数组的多个级别混淆。这就是为什么我在上面的评论中提到的浏览器中使用inspect element 来查看 Rails 生成的内容,然后我可以构建自定义样式的元素以满足我的需求。

记住它的一种方法是:你是require-ing post,然后寻找一个带有images 键和array 类型值的散列。这样就更容易知道在哪里使用单数和复数,什么是键等等。所以从语法上映射出来是:

<model name>[<key defined in strong params>][]

.erb 版本中,如果您查看表单顶部,请考虑f... do |f| 中的值。这就是它获取控制器名称post(单数)的地方,然后您在file_field 中为其提供方法名称:images(复数)。根据 Rails Docs,您可以使用单数 :image,但复数对我来说似乎更正确。

【讨论】:

  • 另外,如果您想展示您正在寻找的自定义样式,我或许可以向您展示如何使用file_field 方法实现这一目标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
相关资源
最近更新 更多