如何比较Ruby on Rails中的两个项目?

时间:2017-10-19 13:59:18

标签: ruby-on-rails

所以我试图重新创建GitHub版本控制,让我们说帖子。我找到了一种方法来重新创建原始帖子使用重复和另一种方法来创建基于原始的新帖子。凉。

我的问题是能够在同一页面上同时显示原始文件和新文件。

到目前为止,我所尝试的只是依靠show方法:

def show
@post = Post.find(params[:id])
end

然后在视图中有一个复选框,允许用户选择多个帖子,点击提交,并且新页面呈现并排显示。最好显示两者之间的差异,但这是一个愿望清单,因为我首先处理这个。

其实我可以干脆做到吗?:

def other_show
@post = Post.where(params[:id])
end

我还在状态中添加了一个布尔值来帮助标记复选框的视图。那么我是否需要在other_show方法中添加关于状态的内容?

2 个答案:

答案 0 :(得分:1)

如果您想重新创建"某种版本控制我建议你使用像audited这样的东西。而不是建立自己的。从您的示例和评论来看,您似乎并未在所有相关(版本)帖子之间建立明确的关系。

使用此gem,对Post内容的每次更改(例如,如果配置正确)都将存储为审核。

显示差异是另一个问题。这通常被称为差异,您可以找到为您执行此操作的宝石,例如:diffy

答案 1 :(得分:0)

要在一个页面上显示2个不同的实体,您需要posts_controller同时提供id个。

声明您的show方法,如下所示:

def show
  @original = Post.find(params[:id])
  @compared = Post.find(params[:compared_id])
end

此方法的正确路径如下所示:

/posts/:id?compared_id=:another_id
# Example: /posts/1?compared_id=2

要在视图中构建此类链接,您需要声明link_to方法,如下所示:

<%= link_to '1 <> 2', post_path(@post, compared_id: '2') %>

如果您想要一个用户可以检查某些帖子的2个复选框的页面,您需要通过Javascript构建此类href。

但实际上我不建议你修改show方法来执行这样的任务。最好只使用show方法从数据库中显示一个实体。您可以创建另一种方法,例如compare并在那里传递两个参数。

def compare
  @original = Post.find(params[:original_id])
  @compared = Post.find(params[:compared_id])
end

routes.rb

resources :posts do
  get 'compare', on: :collection
end

它将为您提供帮助compare_posts_path,这将导致/posts/compare,您需要将original_idcompared_id传递给它,如下所示:< / p>

<%= link_to 'Compare', compare_posts_path(original_id: 'some_id', compared_id: 'some_another_id') %>

将导致

/posts/compare?original_id=some_id&compared_id=some_another_id