【问题标题】:Rails - undefined method `each' for 0:FixnumRails - 0:Fixnum的未定义方法“每个”
【发布时间】:2012-07-14 16:25:24
【问题描述】:

我在 Ruby on Rails undefined method 'each' for 0:Fixnum 中收到以下错误。

这是应用程序跟踪:

app/controllers/videos_controller.rb:23:in `new'
app/controllers/videos_controller.rb:23:in `create'

我的控制器创建和新操作:

  def new
    @video = Video.new
  end

  def create
    method = 'get_' + params[:video][:provider] + '_video_id'
    params[:video][:provider_video_id] = Video.send(method, params[:video][:url])
    params[:video][:thumb] = Video.get_thumb_from_youtube(params[:video][:provider_video_id])
    params[:video][:views] = params[:video][:likes] = 0    
    params[:video][:user_id] = current_user
    @video = Video.new(params[:video])
    if @video.save
      redirect_to video_path(@video), notice:'Video added successfully.'
    else
      render :new
    end
  end

这是我的 view.html.haml :

= form_for @video do |f|
 - if @video.errors.any?
  .error_explanation
    %h2= pluralize(@video.errors.count, "error")
    prohibited this user from being saved:

    %ul
      - @video.errors.full_messages.each do |msg|
        %li= msg
.field
  = f.label :title
  = f.text_field :title
.field
  = f.label :description
  = f.text_area :description
%br
.field
  = f.label :url, 'URL'
  = f.text_field :url
%br
.field
  Provider
  = radio_button :video, :provider, 'vimeo'
  = f.label :provider, 'Vimeo', :value => 'vimeo'
  = radio_button :video, :provider, 'youtube' 
  = f.label :provider, 'Youtube', :value => 'youtube'
%br
.field
  Category
  = collection_select(:video, :category_id, Category.all, :id, :name, :include_blank => true)
%br
.actions
  = f.submit "Add video"   

【问题讨论】:

  • 错误似乎在您正在渲染的“new.html.*”视图中,请添加该代码....
  • @Rahulgarg 我更新了我的代码。
  • 这是完整的堆栈跟踪吗?你能在你的文件中标记这些行吗?
  • @Tass 第 23 行就是这一行 @video = Video.new(params[:video])。我用这一行替换了这一行 params[:video][:views] = params[:video][:likes] = 0params[:video][:views] = 0 现在它可以工作了......

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


【解决方案1】:

来自

params[:video][:views] = params[:video][:likes] = 0

params[:video][:views] = 0

我假设video.likes 是一个关联,而不是一个计数,所以它需要一个Enumerable。如果是关联,rails 会尝试将您添加到 likes 的元素分配给您的 video 模型。添加它们的第一步是迭代 - 使用each。这就是错误的来源。

【讨论】:

  • 我无法理解这个问题,所以我开始工作以释放我的思绪。我在这里,你的答案与我的脑海中出现的相似!起初,我创建了一个类似视频的专栏。然后我创建了另一个模型来管理用户喜欢(用户只能投票一次)但忘记删除视频喜欢列!错误可能来自您的解释!谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 2014-12-25
相关资源
最近更新 更多