我目前正在构建一个应用程序,人们在其中添加项目,然后向项目添加更新。我想对这些更新进行编号,例如:
更新1,更新2等...
有一个列表视图,但也有一个单独的视图,它会在顶部显示更新编号。
我找到了各种索引计数解决方案,用于循环记录以创建列表,但我不知道如何在单个视图上显示更新编号。
我是否应该将更新号码与数据库中的记录一起存储?
关联我的架构部分:
create_table "projects", :force => true do |t|
t.string "title"
t.string "image"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "user_id"
end
add_index "projects", ["user_id"], :name => "index_projects_on_user_id"
create_table "updates", :force => true do |t|
t.string "title"
t.text "text", :limit => 255
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "project_id"
end
add_index "updates", ["project_id"], :name => "index_updates_on_project_id"
答案 0 :(得分:1)
根据我的理解,您有一个包含所有更新的更新模型。因此,它们的ID不在单个项目中的顺序中。
我认为一个简单而安全的解决方案是为此模型添加update_number字段。
然后,每次创建新的更新记录时都会创建一个保存更新编号的方法,例如,在此项目的最后一次更新时为+1。
在有关删除的评论中添加问题
我考虑过这种情况,但我认为你永远不应该删除更新(因为它是一个更新,无论是对还是错),所以我没有说出来。但是,使用此额外的字段解决方案,您可以轻松地重建索引。只需编写一个方法来重建索引,并将其挂钩到Update的任何删除。
旁注:如果我是你,我会将更新设置为非活动状态,而不是物理删除。因为您的用户是项目团队成员,所以他们应该负责任。想想Git,一旦推送到团队或公众,就很难改变提交。
答案 1 :(得分:0)
您可以使用counter cache,也可以直接使用@project.updates.count
答案 2 :(得分:0)
您可以通过created_at进行排序,并使用each_with_index在视图中进行迭代。这不需要更改架构。您也可以使用acts_as_list。
答案 3 :(得分:0)
@update = Update.find params[:id]
@update_number = Update.where(project_id: @update.project_id).order("created_at DESC").index(@update)
更长时间的啰嗦和更多的查询等。最好将该逻辑存储在数据库中。