2015-10-14 38 views
0

我想做一個具有特定標籤的導航。
這些標籤是例如:HTML,CSS和Javascript。
所以,當我點擊其中的一個,它會顯示所有這些標籤的帖子。
我該如何做到這一點?導航與導軌寶石「行爲作爲標籤 - 上」

我的導航代碼現在看起來是這樣的(它在Application.html.erb)

<%= link_to "Computer", tag_list.Computer %> 

我得到這個錯誤:

undefined local variable or method `tag_list' for #<#:0x007feec764ff88>

回答

0

tag_list是一個局部變量或方法,所以除非你在一個幫手這是你的第一個問題創造了它。第二個是名爲.Computer的它不起作用,因爲tag_list是由gem創建的一個方法,用於列出所有對象標記,並且調用.(也稱爲鏈接)試圖調用名爲Computer的方法,該方法不會不存在,這應該只是一個字符串,必須引用字符串。

所以,在你的佈局來看,你可以做

= link_to "Computer", tagged_posts_url(tag: "Computer") 

然後在你的posts_controller.rb添加一個名爲tagged

def tagged 
    if params[:tag].present? 
    @posts = Post.tagged_with(params[:tag]) 
    else 
    @posts = Post.all 
    end 
end 

,以保持乾爽組視圖的動作,你甚至可以告訴它要顯示索引視圖,因爲你很可能已經有一個帖子列表,現在看起來完全一樣,但只包含帶有該標籤的帖子。例如

def tagged 
    if params[:tag].present? 
    @posts = Post.tagged_with(params[:tag]) 
    else 
    @posts = Post.all 
    end 
    render "index" 
end 

然後在你的config/routes.rb添加路由爲您的新控制器作用下,現有的post路線

resources :posts do 
    collection do 
    get "/posts/tagged", as: :tagged 
    end 
+0

謝謝您的回答!我已經自己解決了這個問題,但我會在下次給你的答案:) 但我會給你正確的答案:)) –

0

我得到了它自己。 這裏是代碼:

<%= link_to 'Computer', { :controller => 'posts', :action => 'index', :tag => 'Computer'} %> 

控制器看起來是這樣的:

def index 
    if params[:tag] 
    @posts = Post.tagged_with(params[:tag]).order('created_at DESC') 
else 
    @posts = Post.all.order('created_at DESC') 
end 
end