17

コントローラー名の投稿があります。私の/config/routes.rb中で、私はこれを使用しました-

resources :posts

/app/controllers/posts_controller.rb:

class PostsController < ApplicationController
    def new
            @post = Post.new
    end

    def show
            @post = Post.find(params[:id])
    end

    def categoryshow
            @post = Post.find(params[:category])
    end

    def index
            @posts = Post.all
    end

    def create
            @post = Post.new(params[:post])
            if @post.save
                    flash.now[:success] = "Your Post Successful"
                    redirect_to @post
            else
                    render 'new'
            end
    end
end

私はレールに不慣れで、ルートと混同されることがよくあります。別のstatic_pagesコントローラーがあります。中にファイルがありhome.html.erbます。

私がしたいのは電話することです-

def categoryshow
            @post = Post.find(params[:category])
end

からの投稿コントローラの「categoryshow」メソッド/app/views/static_pages/home.html.erb

どうすればそれを管理できますか?'posts_path'を使用すると、categoryshowアクションではなくインデックスアクションになります。

私はリンクを読み、そこからいくつかのことを試しました。これが私が直面している問題です:

config/routes.rbでこれを試したとき

resources :posts do

    collection do

          get 'categoryshow'

    end

end

これにより、「categoryshow_posts_path」が生成されます

私の見解では、私はこれを使用しました:

<ul class="users">

     <%= Post::CATEGORIES.each do |category| %>

<li>

     <%= link_to category,categoryshow_posts_path %>

</li>

<% end %>

</ul>

私の投稿コントローラーには次の方法があります。

def categoryshow

        @post = Post.find(params[:category])

終わり

この場合、次のエラーが発生します。

PostsController#categoryshowのActiveRecord ::RecordNotFound

IDのない投稿が見つかりませんでした


次に、あなたが提供したリンクに記載されているように、リソースの少ないルートを使用してみました。

 match ':posts(/:categoryshow(/:category))'

ビューでは、私はこれを使用しています:

カテゴリ

 <ul class="users">

 <%= Post::CATEGORIES.each do |category| %>

 <li>

     <%= link_to category,"posts/#{category}" %>

 </li> 

<% end %>

</ul>

この場合、他の既存のリソースフルルートが一致しない場合にのみ、非リソースフルルートが一致します。ただし、show actionが一致していることがわかり、次のエラーメッセージが表示されます。

これはショーアクションです:

デフショー

        @post = Post.find(params[:id])

終わり

PostsController#showのActiveRecord ::RecordNotFound

id=Politicsの投稿が見つかりませんでした

  • ここで助けていただければ幸いです!!

  • ありがとう(シドハース)

4

1 に答える 1

20

ルーティングドキュメントの「RESTfulアクションの追加」セクションを確認してください。

resources :posts do
  collection do
    get 'categoryshow'
  end
end

または:

resources :posts do
  get 'categoryshow', :on => :collection
end

その後のセクションでは、正確なニーズを満たさない場合に任意のルートを追加する方法について説明します。

ルートファイルは明示的に順序付けられていることに注意してください。他の何かがルートをキャプチャした後でルートを照合しようとすると、最初のルートが優先されます。

于 2012-06-24T14:39:37.333 に答える