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个元素