2014-07-02 207 views
1

我有資源,看起來像這樣:軌道4 select_tag嵌套資源

resources :teams do 
    [...] 
    get 'tags/:tag', to: "teams#show", as: :tag 
end 

每個Team可以有多個Posts這在它的回合可以有多個Tags。在我的團隊秀視圖中,我想顯示select_tag,其中列出了TeamPosts的所有標籤。當用戶選擇一個標籤時,我想重定向它們並列出該標籤的所有帖子。我已經開始工作了,但不是用我的嵌套資源和我想要的URLs。我的實現目前看起來是這樣的(我用HAML):

/ View 
= form_tag team_path(@team), method: 'get', class: 'tag_form' do 
    .input-group 
    = select_tag "tag", options_from_collection_for_select(@team_tags, 'id', 'name', params[:tag]), prompt: "All tags", class: 'chosen-select' 

# Controller 

def show 

    @team_tags = @team.posts.tag_counts_on(:tags) 

    if params[:tag] && !params[:tag].blank? 
    tag = Tag.find(params[:tag]) 
    @posts = @team.posts.tagged_with(tag.name) 
    else 
    @posts = @team.posts 
    end 

end 

這工作,但讓我看起來像這樣的網址:

teams/1?utf8=✓&tag=1 

我要的是:

teams/1/tags/tag-name 

這是可能做到的,看起來會如何?

+0

這是路由的問題:[閱讀](HTTP ://guides.rubyonrails.org/routing.html) – dax

+0

謝謝,我認爲路線是正確的。在另外一個地方,我使用'link_to'將用戶重定向到'teams/1/tags/tag-name',它可以工作。但我不知道如何用我的'select_tag'來做到這一點。 – Anders

+0

啊,好吧!我的錯誤:) – dax

回答

1

基於this answer,你也許能夠得到這個工作:

= select_tag "tag", 
    options_from_collection_for_select(@team_tags, 
    'id', 
    'name', 
    params[:tag]), 
    {prompt: "All tags", 
    class: 'chosen-select'}, 
    {onchange: "window.location.replace('/teams/' + @team.id + '/tags/' + this.value);"} 

我不知道的唯一的事情是,如果@team.id將正確插值內:onchange,所以你也可以嘗試改變onchange行這樣的:

onchange: "window.location.replace('/teams/#{@team.id}/tags/' + this.value);" 
+0

謝謝,這工作。由@rneves回答我用名稱作爲值而不是id。 – Anders

1

嘗試使用,或像這樣(與你的字段)控制器

tag = Tag.where("id = ? OR name = ?", params[:tag], params[:tag]) 

上和選擇你要使用的名稱爲值,也許像這樣

tag.name.gsub(" ", "-") 
一個GSUB