要顯示在一個頁面上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
它,像這樣:
<%= 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
我不完全明白,你想達到什麼目的。但是如果你想在一個頁面上創建兩個帖子,在'show'方法中爲'Post'創建'@ var's並且在視圖中並排佈局。 –
其實這就是我真正想要的是在一個頁面上看到這兩個帖子。理想的是看到他們之間的差異。我會在節目中做兩個變量:old_post = Post.find(params [:id]),然後是new_post = Post.where(params [:id])? – Jake
在這種情況下,您將獲得2個相同的帖子。你的'show'路由看起來像'/ posts /:id',所以控制器會得到這個':id',但是如果你想找到另一個帖子並與原來的帖子進行比較,你需要傳遞另一個參數來路由。 '/ posts /:id?comparison_id =:another_id'和show方法'@original = Post.find(params [:id])'和'@compared = Post.find(params [:comparison_id])' –