我很抱歉,如果这是一个愚蠢的问题我无法理解。我在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个元素的列表,最后一个元素为空。