【问题标题】:Rails custom select name screwing up strong params?Rails 自定义选择名称搞砸了强大的参数?
【发布时间】:2018-09-15 19:14:28
【问题描述】:

我有一个“组”表单,上面有一个选择框,如下所示:

    <%= f.text_field :description %> 
    <%= select_tag 'custom_people', People.all  %>

在我的组控制器中:

def group_params

    params.require(:group).permit(:description, :custom_people)

当表单提交时,我可以在我的参数中看到 custom_people:

参数:{"utf8"=>"✓", "authenticity_token"=>"", "group"=>{"description"=>"something"}, "custom_people"=>"1", “提交”=>“保存”}

但在我的控制器操作中 group_params 只得到

{“描述”=>“某事”}

这是因为 select_tag 有一个自定义名称,我需要在我的强参数中使用不同的语法吗?我该如何解决这个问题?

【问题讨论】:

  • 您确定这些是日志中出现的实际参数吗?我相信那些不是。请再次检查。
  • 您想使用f.select :custom_people, People.all。见FormBuilder#select
  • @Pavan 是的,这些是日志中“puts group_params”的实际参数和输出。我刚刚删除了一些与问题无关的额外参数,以使其保持专注/可读
  • @JohanWentholt 在这种情况下我需要使用 select_tag 因为选择元素需要自定义名称,所以我不能使用 f.select
  • @phauwn 为什么不用f.select 来修复它的命名约定

标签: ruby-on-rails


【解决方案1】:

您需要手动命名select_tag 来解决问题。使用下面的代码,您现在可以在 groups: {..} 参数中获取 custom_people。

<%= select_tag 'group[custom_people]', People.all  %>

【讨论】:

  • 出现错误:Group 的未知属性“custom_people”,假设这是因为它不是模型属性,如上所述。
  • 所以这意味着它现在存在于groups: {} 参数中。那么你想用它做什么呢?当您尝试保存在数据库中时出现错误..
  • @phauwn 'group[custom_people]' 可以将其放在"group"=&gt;{"description"=&gt;"something", "custom_people"=&gt;"1",},.. 中,您现在可以查看group_params 中的内容... 那么您接下来想要做什么做?第一个问题解决了..
  • 是的,你是对的......明白了,我今天很慢;)。谢谢,将标记您的答案正确。
猜你喜欢
  • 2018-08-18
  • 2016-10-17
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 2020-01-03
相关资源
最近更新 更多