2016-07-22 4 views
0

ルーティングはどのようにレール4で機能しますか?私は何を達成しようとしていることは、このようなURLです:URLのクリーンなパラメータを持つレール4のルート

..../categories/<name of category> 

現在、私が得るとき:

..../categories?utf8=✓&category=dingus 

HTMLを次のとおりです。

<%= form_tag(categories_path, :method => "get") do %> 
    <%= select_tag 'category', options_for_select(@categories, params[:category]), {onchange: "this.form.submit();", prompt: "Select Category"} %> 
<% end %> 

と、このような路線:

get '/' => '<controller>#h' 
get 'categories' => '<controller>#categories' 

私はgem friendly_idを使用してカテゴリ/:idからカテゴリ/:カテゴリまでのURL。しかし、私はルートを理解する最初のステップで立ち往生しています。私は多くのことを試みましたが、非常に混乱しています。どんなアイデアや提案も大歓迎です!

ありがとうございます!

答えて

0

Routing Guideの「リソース」のセクションを参照してください。あなたのroutes.rb

を持っていた場合:

class Category < ActiveRecord::Base 
    def to_param 
    name 
    end 
end 
:あなたの Categoryモデルにあなたが to_param定義を追加した場合

<%= form_tag(categories_path, :method => "get") do %> 
    <%= select_tag 'category', options_for_select(@categories.map {|c| [c.name, category_path(c)]}, params[:category]), {onchange: "window.location.href = this.value;", prompt: "Select Category"} %> 
<% end %> 

resources :categories 

は、次のようなフォームヘルパーを使用することができます

あなたのすべてのURLはあなたが望む通りですが、 .../categories/booksurl_forヘルパーはあなたのための適切なURLを生成します:

assert category_path(@book_category) == "/categories/book" 

は多くのためActiveRecords::Integrations#to_paramマニュアルを参照してください。

0

私はSamの正確な解決策を働かせることができませんでした。

ERB:

<%= form_tag do %> 
    <%= select_tag 'category', options_for_select(@categories.map {|c| [c, show_category_path(c)]}, params[:category]), {onchange: "window.location.href = this.value;", prompt: "Select Category"} %> 
<% end %> 

routes.rbを:

get '/categories/:category' => 'posts#categories', as: 'show_category' 
それは同じように動作し、ほとんど変化して

@categories = Post.pluck(:category).uniq 

ので:Postモデルでユニークなカテゴリのマイ@categories導出されたアレイ

コントローラ

def categories 
    @posts = Post.where(category: params[:category]) 
end 

URLは:/categories/dingusです。私はスペースが%20として表示されている問題を抱えています(例:/categories/dingus%20burgerですが、これは別の問題ですが、to_paramまたはurl_forメソッドが役立つと思われます)

このチュートリアルは、 https://www.youtube.com/watch?v=16Bk_0RADLQ

関連する問題