【问题标题】:Rails: undefined method map, Using map inside modelRails:未定义的方法映射,在模型中使用映射
【发布时间】:2012-11-30 05:13:10
【问题描述】:

我正在尝试在我的模型中使用地图为options_for_select 制作项目集合:

  def get_products
    Product.all.map { |product| [product.description,product.id] }
  end

但是rails给出了错误:

:get_products:Symbol 的未定义方法 `map'

不能在模型中使用地图吗?

view中的代码是:

<%= f.select_tag :product_id, options_for_select(:get_products) %>

更新

将视图中的代码更改为get_products 而不是:get_products 会出现错误:

# 的未定义局部变量或方法 `get_products'

【问题讨论】:

  • 我们可以看看你打电话给options_for_select的线路吗?
  • 上述所有工作正常(返回数组数组);可能是您在 options_for_select 中引用它的方式导致了问题 - 也许它应该是 get_products 而不是 :get_products

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

options_for_select 期望传入一个集合而不是符号。我相当确定您的错误来自 Rails 代码内部,而不是您的模型。

#get_products改成类方法:

def self.get_products
  Product.all.map { |product| [product.description,product.id] }
end

然后在视图中(假设 #get_products 位于名为 Product 的模型中):

<%= f.select :product_id, options_for_select(Product.get_products) %>

【讨论】:

  • 非常感谢,但我很遗憾没有select_tag 用于form_for 的方法。我该怎么办?
  • @EH_warch 我更新了我的答案。我认为您不需要_tag 只需f.select
【解决方案2】:

应该是这样的

&lt;%= f.select_tag :product_id, options_for_select(Product.get_products) %&gt;

【讨论】:

  • 没有将self添加到模型内部的方法不起作用
  • 是的,很抱歉,您已经知道了,但我想这是来自@patricmcgraw 的回复
猜你喜欢
  • 1970-01-01
  • 2019-01-25
  • 2019-01-23
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 2021-11-02
相关资源
最近更新 更多