0

我目前正在构建一个应用程序,人们在其中添加一个项目,然后向项目添加更新。我想对这些更新进行编号,例如:

更新 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"
4

4 回答 4

1

据我了解,您有一个包含所有更新的更新模型。因此它们的 id 在单个项目中不是按顺序排列的。

我认为一个简单而安全的解决方案是为此模型添加一个 update_number 字段。

然后,您创建一个方法来在每次创建新的更新记录时保存更新编号,例如在此项目中的最后一次更新时 +1。

在关于删除的评论中添加问题

我考虑过这种情况,但我认为您永远不应该删除更新(因为它是更新,无论对错),所以我没有说。但是,使用这个额外的字段解决方案,您可以轻松地重建索引。只需编写一个方法来重建索引,并将其挂钩到 Update 的任何删除中。

旁注:如果我是你,我会将更新设置为非活动状态,而不是物理删除它。因为您的用户是项目团队成员,所以他们应该足够负责。想想 Git,一旦提交给团队或公众,就很难更改提交。

于 2013-04-03T11:31:50.670 回答
0

您可以使用计数器缓存,也可以直接使用@project.updates.count

于 2013-04-03T11:31:39.217 回答
0

您可以通过 created_at 进行排序,并使用 each_with_index 在您的视图中进行迭代。这不需要架构更改。您也可以使用acts_as_list

于 2013-04-03T12:12:27.860 回答
0

比利陈有最好的答案,但如果您正在寻找替代方案,您可以在该项目的更新中查找您的更新,并找到它的索引。

@update = Update.find params[:id]
@update_number = Update.where(project_id: @update.project_id).order("created_at DESC").index(@update)

更冗长的查询和更多的查询等。最好将该逻辑存储在数据库中。

于 2013-04-03T12:21:53.530 回答