-1

だから私は非常にシンプルだと思うレイアウトを持っています。私の設定ルートは次のとおりです。

  resources :webcomics
  match '/webcomics/first' => 'webcomics#first', :as => :first
  match '/webcomics/random' => 'webcomics#random', :as => :random
  match '/webcomics/latest' => 'webcomics#latest', :as => :latest

コントローラ:

  def show
    @webcomic = Webcomic.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @webcomic }
    end
  end

  def first
    @webcomic = Webcomic.order("created_at ASC").first
    respond_to do |format|
      format.html { render 'show'}
      format.json { render json: @webcomic }
    end
  end

ナビゲーションバー:

<%= link_to first_webcomics_path, :rel => "tooltip", :title => "first comic" do %>
              formatting in here
        <% end %>

このリンクをクリックすると、正しいパス /webcomics/first に移動しますが、エラーが表示されます

Routing Error
No route matches {:action=>"edit", :controller=>"webcomics"}

どのように「編集」するのか頭を悩ませています。このメッセージが完全に間違っていても、編集はできますが、なぜアクション編集に行こうとするのでしょうか。

def edit
    @webcomic = Webcomic.find(params[:id])
end

レーキルートの結果:

 first_webcomics GET    /webcomics/first(.:format)    webcomics#first
latest_webcomics GET    /webcomics/latest(.:format)   webcomics#latest
random_webcomics GET    /webcomics/random(.:format)   webcomics#random
       webcomics GET    /webcomics(.:format)          webcomics#index
                 POST   /webcomics(.:format)          webcomics#create
    new_webcomic GET    /webcomics/new(.:format)      webcomics#new
   edit_webcomic GET    /webcomics/:id/edit(.:format) webcomics#edit
        webcomic GET    /webcomics/:id(.:format)      webcomics#show
                 PUT    /webcomics/:id(.:format)      webcomics#update
                 DELETE /webcomics/:id(.:format)      webcomics#destroy
            root        /                             webcomics#index
4

2 に答える 2

3

ルーティングは順調です。matchの上に esを置きresourcesます。

そうは言っても、代わりにこれらのルートを RESTful アクションとして追加することを検討します。

resources :webcomics
  collection do
    get 'first'
    get 'random'
    get 'latest'
  end
end

IMOこれは少しきれいで、たまたまうまく収まります。


この問題は、showテンプレートの編集リンクが原因です。編集リンクには、編集するオブジェクトが必要です。

<%= link_to "edit", edit_webcomic_path(@webcomic) %>
于 2013-04-09T23:32:54.663 に答える
3

matchこれらの 3 つのルールを次のようにresources行の上に置きます。

match '/webcomics/first' => 'webcomics#first', :as => :first
match '/webcomics/random' => 'webcomics#random', :as => :random
match '/webcomics/latest' => 'webcomics#latest', :as => :latest
resources :webcomics

理由はRuby Guides: Routingで説明されています:

Rails ルートは指定された順序で照合されるため、get 'photos/poll' の上に resources :photos がある場合、resources 行の show アクションのルートは get 行の前に照合されます。これを修正するには、最初に一致するように get 行を resources 行の上に移動します。

于 2013-04-09T23:28:46.743 に答える