为什么ruby会在数组中添加一个空元素?

时间:2014-04-01 20:39:48

标签: ruby-on-rails ruby arrays

我很抱歉,如果这是一个愚蠢的问题我无法理解。我在Ruby on Rails项目中有2个模型 - Project和Page。页面属于一个项目,而项目有多个页面。

在我执行Page.where(project_id: 25)时在rails控制台中,我收到4个结果,这是正确的。但是当我做的时候在我的控制器中

@project = Project.find(25)
@all_pages = @project.pages

出于某种原因,@ all_pages是一个包含5个元素的数组。最后一个元素是空的

<Page id: nil, name: nil, project_id: 25, created_at: nil, updated_at: nil, parent_page_id: nil, weight: nil>

我无法弄清楚为什么会出现空元素。你能帮我解决一下吗?感谢。

更新

以下是来自我的models \ controllers

的更多数据

型号:

class Page < ActiveRecord::Base
  belongs_to :project
  belongs_to :parent_page, class_name: "Page"
  has_many :sub_pages, class_name: "Page", foreign_key: "parent_page_id"
  has_many :comments, dependent: :destroy

  default_scope { order('weight ASC') }

  before_create :set_weight

  include ActiveModel::Validations
  validates_presence_of :name

  def set_weight
    self.weight = Project.find(self.project_id).pages.maximum("weight").to_i + 1 
  end

end

class Project < ActiveRecord::Base

  has_many :pages, dependent: :destroy

  has_many :project_roles, dependent: :destroy
  has_many :users, through: :project_roles

  #validates :name, presence: true, length: { minimum: 5 }
  include ActiveModel::Validations
  validates_presence_of :name
  validates_length_of :name, minimum: 5

end

控制器:

  def show
    @project = Project.find(params[:project_id])
    @all_pages = @project.pages
    @page = Page.find(params[:id]) 
  end

然后在我的视图中,我正在使用它:

<%= select_tag(:parent_page_id, options_from_collection_for_select(@all_pages, "id", "name"), { :class => 'form-control' }) %>

这会呈现一个包含5个元素而不是4个元素的列表,最后一个元素为空。

0 个答案:

没有答案