【问题标题】:What makes a rails param?是什么让 rails 参数?
【发布时间】:2015-08-03 19:35:39
【问题描述】:

到目前为止,我已经建立了几个 Rails 站点(使用起来非常愉快的框架),但我逐渐注意到我学习强参数的猴看猴做方法显然在我的理解上留下了一两个差距.

看下面一个简单的例子(Recipe Box by mackenziechild

def recipe_params
        params.require(:recipe).permit(:title, :description, :image, ingredients_attributes: [:id, :name, :_destroy], directions_attributes: [:id, :step, :_destroy])
end

我实际上不知道他为什么能够引用:recipe 作为参数。我对参数的松散理解是它们本质上是表中的列,但是上面的示例暗示它们也可以是表本身的名称。 (没有一列被命名为“recipe”,尽管其中一个表被命名为“recipes”)。

如果我生成模型MyThing(单数CamelCase)并因此生成相应的表my_things(复数snake_case),我是否正确理解,我自动有一个相应的参数:my_thing(单数snake_case冒号)供我使用?

我的问题如下:

  1. 以上理解准确吗?
  2. 除了表名和列名之外,是否还有其他参数对应于其他参数?如果有,它们是什么?
  3. 有没有办法列出我可以使用的参数(类似于rake routes)?

非常感谢您提供的任何澄清!

【问题讨论】:

  • 参数就是:参数。这是一个哈希。对于食谱,它们位于哈希键 :recipe 下。它不是表或列的名称,它只是一个哈希键。其余的也是如此。如果您希望能够传入参数,则必须允许 - 它们可以任意命名,例如,您可以传入不属于任何表的隐藏字段。

标签: ruby-on-rails activerecord model-view-controller rails-activerecord strong-parameters


【解决方案1】:

params 哈希基本上是浏览器(或 API 客户端)发送的数据。它们没有在任何地方定义,因为浏览器可以向您发送它想要的任何东西(尝试将 &foo=bar 添加到应用程序中 URL 的末尾,看看这如何将条目添加到参数中),尽管通常您的应用程序可能期望数据具有一定的形状。

对自己的参数意义不大;重要的是如何使用它们。如果您将它们传递给SomeModel.create,那么键应该是模型中属性的名称(并且您应该使用强参数来控制可以设置哪些属性)。这只是它们的一种(尽管经常)使用:例如,它们可能包含搜索条件。

【讨论】:

    【解决方案2】:

    控制器中可用的params 仅仅是浏览器中表单中字段名称的结果。表单中的字段名称遵循 Rails 使用您在视图中使用的表单辅助函数创建的约定。

    当您在视图中显示此内容时:

    = form_for @recipe do |f|
      = f.text_field :title
    

    然后会生成以下 HTML:

    <form stuff-here>
      <input name="recipe[title]" other-stuff>
    

    而 HTML 中的 name 属性将导致该字段的值在您的控制器中公开为 params[:recipe][:title] 这是参数的来源,如果您更改了其中的任何部分,那么params 的名称会有所不同。

    所以对于你的问题:

    1. 有点,你得出了正确的结论,但也许不知道为什么:)
    2. 你可以有任何你喜欢的params,这取决于你使用的表单助手,以及你如何使用它们。一切都可以被覆盖。
    3. 您可以随时在控制器中执行以下操作:logger.debug params.inspect,这将允许您查看(在您的 log/development.log 文件中)有哪些 params 供您使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多