2017-10-19 17 views
0

私はGitHubのバージョンコントロールを再作成しようとしています。私は、オリジナルを元にして新しい投稿を作成する別の方法を使って、元の投稿を複製して再作成する方法を見つけました。クール。Ruby on Rails内の2つのアイテムを比較するには?

私の問題では、元のページと新しいページの両方を同じページに表示できます。

私がこれまで試みられてきたことがちょうど持ってshowメソッドに依存している。そして、ビューの形式で複数の投稿をユーザーが選択できるようにする]チェックボックスを持っている

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

、Aをクリックしてくださいサブミットし、新しいページを並べて表示します。好ましくは2つの間の違いを表示するが、これは私が最初にこれを扱うときの希望リストである。

は、実際に私はただ単に何ができる?:

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

私もチェックボックスをマークするためのビューに支援するためのブール値としてのステータスに追加しました。ステータスについてother_showメソッドに何かを置く必要がありますか?

+0

私はあなたが達成したいことを完全に理解していません。しかし、1つのページに2つの投稿が必要な場合は、 'show'メソッドの' Post'sに '@ var'を作成し、ビューに並べてレイアウトします。 –

+0

実際には、私が本当に望むのは、1ページの両方の投稿を見ることです。理想的にはそれらの違いを見ること。私はショーの中でold_post = Post.find(params [:id])とnew_post = Post.where(params [:id])のように2つのヴァーを行うのですか? – Jake

+0

この場合、2つの同一の投稿が表示されます。あなたの 'show'ルートは'/posts /:id'のように見えるので、コントローラはこの ':id'を取得しますが、別の投稿を見つけて元のものと比較したい場合、別のパラメータを渡す必要があります。 '/ posts /:id?compar_id =:another_id'と表示メソッド' @original = Post.find(params [:id]) 'と' @compared = Post.find(params [:compar_id]) ' –

答えて

0

あなたはposts_controller両方id Sを与える必要が1ページの2つの異なるエンティティを表示します。

あなたのこのような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メソッドを使用すると、データベースから1つのエンティティを表示する場合にのみ有効です。別の方法を作成することができます。 compareと入力し、両方のパラメータを渡します。routes.rb

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

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

それはあなたが/posts/compareにつながる、あなたはこのように、それにoriginal_idcompared_idに合格する必要がありますcompare_posts_pathを、ヘルパー与える:

<%= 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のようなものを使用することをお勧めします。あなた自身のものを作る代わりに。あなたの例とコメントから、関連するすべてのバージョンの投稿の間に明確な関係はないと思われます。

この宝石を使用して、投稿コンテンツへの各変更(たとえば、適切に設定されている場合)が監査として保存されます。

違いを表示するのは別の問題です。これは通常、デフと呼ばれています、あなたはたとえば、あなたのためにそれを行う宝石を見つけることができます:diffy

+0

これは素晴らしいことです。私が書いたこのコードよりも前にこれらのコードがあることを願っています。ありがとうございました! – Jake

+0

コードを書くことは、できるだけ少ないはずです。書き込む必要があるコードを少なくすると、プランニングやリサーチを行う回数が増え、壊れるコードは少なくなります。あなたのプロジェクトに幸運を祈る! – Leito

+1

私はすぐにそれを学んでいます。ありがとう – Jake

関連する問題