所以我试图重新创建GitHub版本控制,让我们说帖子。我找到了一种方法来重新创建原始帖子使用重复和另一种方法来创建基于原始的新帖子。凉。
我的问题是能够在同一页面上同时显示原始文件和新文件。
到目前为止,我所尝试的只是依靠show方法:
def show
@post = Post.find(params[:id])
end
然后在视图中有一个复选框,允许用户选择多个帖子,点击提交,并且新页面呈现并排显示。最好显示两者之间的差异,但这是一个愿望清单,因为我首先处理这个。
其实我可以干脆做到吗?:
def other_show
@post = Post.where(params[:id])
end
我还在状态中添加了一个布尔值来帮助标记复选框的视图。那么我是否需要在other_show方法中添加关于状态的内容?
答案 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_id
和compared_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