2017-10-19 59 views
0

所以我想重新創建GitHub版本控制讓我們說帖子。我找到了一種使用重複和另一種方法重新創建原創帖子的方法,以根據原始文件創建新帖子。涼。如何比較Ruby on Rails中的兩個項目?

我的問題是能夠在同一頁面上顯示原始和新的。

我已經嘗試迄今爲止是隻依靠表演方法具有:

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

然後在視圖必須在形式的複選框,允許用戶選擇多個帖子,點擊提交,並且新頁面呈現並排顯示。最好顯示兩者之間的差異,但這是我首先處理的願望清單。

其實我能不能簡單地做?:

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

我的狀態還添加了一個布爾值,幫助對標記的複選框的看法。那麼我需要在other_show方法中加入一些關於狀態的東西嗎?

+0

我不完全明白,你想達到什麼目的。但是如果你想在一個頁面上創建兩個帖子,在'show'方法中爲'Post'創建'@ var's並且在視圖中並排佈局。 –

+0

其實這就是我真正想要的是在一個頁面上看到這兩個帖子。理想的是看到他們之間的差異。我會在節目中做兩個變量:old_post = Post.find(params [:id]),然後是new_post = Post.where(params [:id])? – Jake

+0

在這種情況下,您將獲得2個相同的帖子。你的'show'路由看起來像'/ posts /:id',所以控制器會得到這個':id',但是如果你想找到另一個帖子並與原來的帖子進行比較,你需要傳遞另一個參數來路由。 '/ posts /:id?comparison_id =:another_id'和show方法'@original = Post.find(params [:id])'和'@compared = Post.find(params [:comparison_id])' –

回答

0

要顯示在一個頁面上2個不同的實體,你需要給posts_controllerid秒。

聲明你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它,像這樣:

<%= 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 
1

如果你想「重新創建」某種版本控制,我建議你使用類似audited的東西。而不是建立自己的。從你的例子和評論看來,你沒有明確的關係,所有相關(版本)的職位。

使用此gem,Post內容的每次更改(例如,如果配置正確)都將作爲審覈進行存儲。

顯示差異是一個不同的問題。這通常被稱爲DIFF,你可以找到爲你做,例如寶石:diffy

+0

這真是太棒了,我希望在編寫所有這些代碼之前,我已經有了這些。謝謝! – Jake

+0

編寫代碼應該是你做的最少的事情,你計劃/研究得越多,你需要編寫的代碼就越少,可以中斷的代碼就越少。祝你的項目好運! – Leito

+1

我很快就知道了。謝謝 – Jake