Ruby on rails Rails—如何在帖子列表和单个帖子上显示帖子编号?

Ruby on rails Rails—如何在帖子列表和单个帖子上显示帖子编号?,ruby-on-rails,Ruby On Rails,我目前正在开发一个应用程序,人们可以在其中添加一个项目,然后向该项目添加更新。我想对这些更新进行编号,例如: 更新1、更新2等 有一个列表视图,但也有一个单独的视图,它会在顶部显示更新编号 我已经找到了各种索引计数解决方案,可以在循环记录以创建列表时使用,但我一直在研究如何在单个视图上显示更新编号 我是否应该将更新号与记录一起存储在数据库中 我的模式的相关部分: create_table "projects", :force => true do |t| t.string "t

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

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

您可以使用,也可以直接使用
@project.updates.count

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

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

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

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

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


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

您可以在创建时进行排序,并在视图中使用每个带有索引的元素进行迭代。这不需要更改模式。您也可以使用。

Billy Chan给出了最佳答案,但如果您正在寻找替代方案,您可以在该项目的更新中查找您的更新,并找到其索引

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

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

您能发布模式的相关部分吗?编辑以添加有关项目和更新的模式位这会给出更新计数,不是个别的更新数字。不确定这是否完全正确,因为我认为这只是为了得到一个总数?在railscast中有一些有用的东西,我以前没有找到过,但可以在我的应用程序的其他地方使用:)是的,没错。我想我会在该字段中添加:)编辑:另外,我认为该方法的逻辑是这样的吗?找到给定项目的上一个最新更新并获取其更新编号,然后在该编号上添加1并将其存储在新记录中?是的,我心目中的方法与此类似。可能并不完美,但它应该可以工作。刚刚意识到,如果(例如)删除了第3次更新(共5次),这可能会有不足之处。除非我写了一些东西,在删除后更新了其余的记录,否则编号会从2跳到4?这对于查询数始终相同的单个更新页面非常有效。我只是做了一点小小的改变,将+1放在末尾,因为它默认从0开始。我只是把它添加到我的视图中<代码>然而,我可能仍然会选择Billy Chan的数据库方法,因为我认为我也可以在我的URL中使用建议的更新编号字段,并使其比当前的ID更相关:)哦,忘记了+1。是的,我也会这么做。哦,是的,我还把DESC改成了ASC。但我不确定这是否是我对代码的特殊用法所要求的。。