Ruby on rails “AK”的“未定义方法”“状态”错误:“集合”的“字符串”`

Ruby on rails “AK”的“未定义方法”“状态”错误:“集合”的“字符串”`,ruby-on-rails,Ruby On Rails,在将第二个方法uniq.pulk:state添加到下面的代码后,我得到以下错误消息: undefined method `state' for "AK":String. 我查看了这里的所有帖子,没有找到任何与此问题相关的内容。如果您能提供任何见解或帮助,我们将不胜感激 <%= f.collection_select :state, (Boli.order(:state).uniq.pluck(:state)), :id, :state, include_blank: true %>

在将第二个方法uniq.pulk:state添加到下面的代码后,我得到以下错误消息:

undefined method `state' for "AK":String.
我查看了这里的所有帖子,没有找到任何与此问题相关的内容。如果您能提供任何见解或帮助,我们将不胜感激

<%= f.collection_select :state, (Boli.order(:state).uniq.pluck(:state)), :id, :state, include_blank: true %>
谢谢@D-side,现在使用分组_集合有困难。我希望用户能够选择特定状态下的一组银行。获取错误消息undefined method“map”for:id:Symbol,使用以下代码:

 <%= f.grouped_collection_select :bank, :id, Boli.order(:bank), :id, :bank, include_blank: true%>
使用单个属性名称的Pull返回属性值数组。字符串,在你的情况下

然而,集合_select是在考虑模型实例的情况下构建的,因为它接受。。。好吧,不管怎样:

集合\选择方法,集合,值\方法,文本\方法,选项={},html \选项={} :value_方法和:text_方法参数是要对集合的每个成员调用的方法。返回值分别用作每个标记的值属性和内容。它们也可以是响应调用的任何对象,例如proc,它将为集合的每个成员调用以检索值/文本

显然,由于您已经获取了属性状态的值,因此再次调用结果值的状态是毫无意义的

您可以通过多种方式修复此问题

PostgreSQL在expr上的独特性 通过将.uniq.pulk:state替换为.selectDISTINCT ON state id,state,您将获得ActiveRecord模型实例,因此结果集合的每个元素都将具有方法id和state,正如集合\u select所期望的那样

或者使用你的查询,带着勇气 …通过提供proc而不是:id和:state,它们将字符串作为参数并生成适当的值


这一切归根结底都取决于你需要什么。

谢谢@d-side,它工作得非常好!我确实不得不将我的本地数据库从sqlite更改为postgreSQL,只是它工作起来很有魅力。您提供的链接也适用于表单生成器吗?它似乎在解决没有表单生成器的情况。我正在尝试创建一个动态的下拉框布局,并使用分组的集合,我现在也遇到了问题。请参阅上面的代码。@richiepop2文档中的表单生成器引用了这些文档,所以我想我可以为读者节省额外的往返时间。您可以看到参数签名不匹配,是的,但所有内容仍然适用。