PinsController#index 中的 NoMethodError,#<Class:0x0000010150ec98> 的未定义方法“to_a”

Posted

技术标签:

【中文标题】PinsController#index 中的 NoMethodError,#<Class:0x0000010150ec98> 的未定义方法“to_a”【英文标题】:NoMethodError in PinsController#index, undefined method `to_a' for #<Class:0x0000010150ec98> 【发布时间】:2014-02-07 09:02:43 【问题描述】:

我在为期一个月的课程中在我的 pins_controller 中遇到了这个错误,不知道如何解决它。这是我的控制器。


class PinsController < ApplicationController
  before_action :set_pin, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, except: [:index]

def index
  @pins = Pin.to_a
end

def show
end

def new
 @pin = current_user.pins.build
end

def edit
end

def create
  @pin = current_user.pins.build(pin_params)
if @pin.save
  redirect_to @pin, notice: 'Pin was successfully created.'
else
  render action: 'new'
end

结束

定义更新 如果@pin.update(pin_params) redirect_to @pin,注意:“Pin 已成功更新。” 别的 渲染动作:“编辑” 结尾 结束

默认销毁 @pin.destroy 重定向到 pin_url 结束

私人的 # 使用回调在动作之间共享通用设置或约束。 def set_pin @pin = Pin.find(params[:id]) 结束

def correct_user
  @pin = current_user.pins.find_by(id: params[:id])
  redirect_to pins_path, notice: "Not authorized to edit this pin" if @pin.nil?
end

# Never trust parameters from the scary internet, only allow the white list through.
def pin_params
  params.require(:pin).permit(:description, :image)
end

结束

【问题讨论】:

【参考方案1】:

你应该有

Pin.all

而不是

Pin.to_a

在您的控制器中。

【讨论】:

我同意.all,但我们这里还需要.to_a吗?我宁愿将 Pin 图作为一个集合而不是一个数组(即使它们非常相似) @Mallanaga,谢谢你的建议,你是对的。更重要的是,在 4.0.0 之前的 Rails 版本中,all 实际上返回一个数组,所以调用它to_a 是没有意义的。 @MarekLipka 我认为它应该返回一个 ActiveRecord::Relation 对象,这也允许 Rails 仅在遇到视图中的实例 var 时才延迟加载结果。 @JosephSilvashy 它在 Rails 4 中使用,作者使用 Rails 4(强参数)。

以上是关于PinsController#index 中的 NoMethodError,#<Class:0x0000010150ec98> 的未定义方法“to_a”的主要内容,如果未能解决你的问题,请参考以下文章

[ jquery 过滤器 .eq( index | -index ) ] 此方法用于在选择器的基础之上精确筛选出第N个元素

编写程序,找出数组a中前n个元素中的最小元素及其下标

MFC 怎么将RichEdit中的光标定位在指定的行和列

通过python中的索引和数组对数据框进行切片

jQuery each

火炬中的单次多维索引 - 也许使用 index_select 或收集?