1

/monstersというテンプレートURLがあります。テンプレートにはサイドバーがあります

タイプで並べ替え:

  • 地球
  • 飛行
  • 等...

私はそれらのそれぞれをルーティングするための最良の方法は何であるか疑問に思いましたか?私はそれが次のようなURLを持っているのが良いだろうと推測しています

www.example.com/monsters/water 

また

www.example.com/monsters/fire.

どうすればいいですか?私のroutes.rbで私は考えました

match 'monsters/water',     to: 'monsters#water'
match 'monsters/fire',      to: 'monsters#fire'
match 'monsters/earth',     to: 'monsters#earth'
match 'monsters/flying',    to: 'monsters#flying'

等...

しかし、それは良い方法ではないように感じます。毎回異なるアクションに行く別の試合がありますか?誰かがデザインを手伝ってくれませんか?徹底的で明確な助けをいただければ幸いです=)

たくさんありがとう=)

または、そもそも個別のリンクを設定する必要がありますか?インデックスアクションにすべてを投稿する必要がありますか?フォームを使用して:postを使用することを考えましたが、それはモンスターの作成アクションによってすでに実行されています。現在、私のインデックスページ(/ monsters)には、それらすべてがリストされています。これは、私のインデックスアクションでは、

@monsters = Monster.paginate(page: params[:page])
4

2 に答える 2

3

必要なものは次のとおりです。

resources :monsters, path: '/monsters/:category'

これにより、次のルートが生成されます。

named path   | verb   | route                                  | controller#action
             |        |                                        |
monsters     | GET    | /monsters/:category(.:format)          | monsters#index
monsters     | POST   | /monsters/:category(.:format)          | monsters#create
new_monster  | GET    | /monsters/:category/new(.:format)      | monsters#new
edit_monster | GET    | /monsters/:category/:id/edit(.:format) | monsters#edit
monster      | GET    | /monsters/:category/:id(.:format)      | monsters#show
monster      | PUT    | /monsters/:category/:id(.:format)      | monsters#update
monster      | DELETE | /monsters/:category/:id(.:format)      | monsters#destroy

また、次のようなことができるようになります。

/monsters/fire  => { controller: 'monsters', action: 'index', category: 'fire' }
/monsters/water => { controller: 'monsters', action: 'index', category: 'water' }
/monsters/earth/15 => { controller: 'monsters', action: 'show', category: 'earth', id: 15 }

さらに、名前付きパスを引き続き使用できます。

monsters_path('flying') => '/monsters/flying'
edit_monster_path('fire', 15) => '/monsters/fire/15'

そして、次のようなモンスターへのリンク:

<%= link_to monster.name, monster_path(monster.category, monster.id) -%>
于 2012-04-24T07:01:00.250 に答える
2

変数セグメントを受け入れる一般的なルートを指定し、それを使用して正しいタイプのモンスターをロードする必要があります。

match "monsters/:category" => "monsters#index"

...

class MonstersController < ApplicationController
  def index
    @monsters = Monster.find_by_category(params[:category])
  end
end

:categoryセグメントが渡された場合、セグメントをオプションにして、index アクションを変更して条件付きで使用することができます。

def index
  @monsters = Monster.find_by_category(params[:category]) if params[:category]
  @monsters ||= Monster.all
end
于 2012-04-21T00:50:16.710 に答える