2

communityfeed_item / micropostのコンテンツを削除しようとすると、次のエラーが発生します。

Routing Error

No route matches [GET] "/microposts/45"
Try running rake routes for more information on available routes.

ルートを確認すると、削除と投稿が表示されます。これが実際に機能するために必要なすべてですが、「get」エラーが発生し続けます。

posts GET    /posts(.:format)               posts#index
               POST   /posts(.:format)               posts#create
      new_post GET    /posts/new(.:format)           posts#new
     edit_post GET    /posts/:id/edit(.:format)      posts#edit
          post GET    /posts/:id(.:format)           posts#show
               PUT    /posts/:id(.:format)           posts#update
               DELETE /posts/:id(.:format)           posts#destroy
     locations GET    /locations(.:format)           locations#index
               POST   /locations(.:format)           locations#create
  new_location GET    /locations/new(.:format)       locations#new
 edit_location GET    /locations/:id/edit(.:format)  locations#edit
      location GET    /locations/:id(.:format)       locations#show
               PUT    /locations/:id(.:format)       locations#update
               DELETE /locations/:id(.:format)       locations#destroy
    communitys GET    /communitys(.:format)          communitys#index
               POST   /communitys(.:format)          communitys#create
 new_community GET    /communitys/new(.:format)      communitys#new
edit_community GET    /communitys/:id/edit(.:format) communitys#edit
     community GET    /communitys/:id(.:format)      communitys#show
               PUT    /communitys/:id(.:format)      communitys#update
               DELETE /communitys/:id(.:format)      communitys#destroy
         users GET    /users(.:format)               users#index
               POST   /users(.:format)               users#create
      new_user GET    /users/new(.:format)           users#new
     edit_user GET    /users/:id/edit(.:format)      users#edit
          user GET    /users/:id(.:format)           users#show
               PUT    /users/:id(.:format)           users#update
               DELETE /users/:id(.:format)           users#destroy
      sessions POST   /sessions(.:format)            sessions#create
   new_session GET    /sessions/new(.:format)        sessions#new
       session DELETE /sessions/:id(.:format)        sessions#destroy
    microposts POST   /microposts(.:format)          microposts#create
     micropost DELETE /microposts/:id(.:format)      microposts#destroy
                      /communitys(.:format)          communitys#index
                      /users(.:format)               users#index
  profile_info        /profile/info(.:format)        users#info
          join        /join(.:format)                users#new
         login        /login(.:format)               sessions#new
        logout DELETE /logout(.:format)              sessions#destroy
          root        /                              static_pages#home
          help        /help(.:format)                static_pages#help
         about        /about(.:format)               static_pages#about
       contact        /contact(.:format)             static_pages#contact
                      /posts(.:format)               static_pages#posts
       meetups        /meetups(.:format)             static_pages#meetups
          chat        /chat(.:format)                static_pages#chat
        groups        /groups(.:format)              static_pages#groups
           web        /web(.:format)                 static_pages#web
       profile        /profile(.:format)             static_pages#profile

shared / _communityfeed_item.html.erbのビューコードにdeleteメソッドが含まれています:

<% if current_user?(communityfeed_item.user) %>
        <%= link_to "delete", communityfeed_item, method:  :delete,
                                         confirm: "You sure?",
                                         title:   communityfeed_item.content %>
      <% end %>

それでも、[削除]をクリックすると、何らかの理由で「取得」リクエストが送信され、ルーティングエラーが発生します。なぜこれが起こっているのか誰かが知っていますか?

この削除リクエストを使用するプロフィールページでも、これは厄介です。

<% if current_user?(micropost.user) %>
    <%= link_to "delete", micropost, method:  :delete,
                                     confirm: "You sure?",
                                     title:   micropost.content %>
    <% end %>

まだルート一致がありません[GET]!

さらに奇妙なことに、これはレンダリングされるHTMLです。

<a href=​"/​microposts/​48" title="heyheyhye ">​delete​&lt;/a>​
<a href=​"/​microposts/​47" title=​"ddsf">​delete​&lt;/a>​

これが埋め込まれたルビーであるにもかかわらずなど:

<% if current_user?(communityfeed_item.user) %>
        <%= link_to "delete", communityfeed_item, method:  :delete,
                                         confirm: "You sure?",
                                         title:   communityfeed_item.content %>
      <% end %>

ルート.rb内:

Meetumea::Application.routes.draw do
  resources :comments

  resources :posts

  resources :locations

  resources :communitys
  resources :users
  resources :sessions, only: [:new, :create, :destroy]
  resources :microposts,  only: [:create, :destroy]

  match '/communitys', to: "communitys#index"

  match '/users', to: "users#index"
  match '/profile/info', to: "users#info"

  match '/join', to: "users#new"
  match '/login',  to: 'sessions#new'
  match '/logout', to: 'sessions#destroy', via: :delete

  root to: "static_pages#home"
  match '/help', to: "static_pages#help"
  match '/about', to: "static_pages#about"
  match '/contact', to: "static_pages#contact"
  match '/posts', to: "static_pages#posts"
  match '/meetups', to: "static_pages#meetups"
  match '/chat', to: "static_pages#chat"
  match '/groups', to: "static_pages#groups"
  match '/web', to: "static_pages#web"
  match '/profile', to: "static_pages#profile"
end
4

3 に答える 3

6

ページに含まれている控えめなJavaScriptに問題があるようです。

マスターレイアウト(layouts/application.erb.htmlまたはその何か)で、javascript_include_tag :applicationどこかに見えますか?それはを指しますapp/assets/javascripts/application.js。これはそのファイルに表示されます。

//= require jquery
//= require jquery_ujs

最後の行は、控えめなJavaScriptに必要なライブラリがページリクエストとともに読み込まれていることを確認します。

次に、あなたの中にGemfile、あなたは持っているべきgem "jquery-rails"です。最近追加された場合はbundle install、コマンドラインからプロジェクトディレクトリ内で実行して、インストールされていることを確認する必要があります。

あなたはそのようなものすべてを見ますか?古いバージョンのまたはの場合と同じように、ロードされたようなものは表示されないrails.jsと思います。レンダリングされたページのソースを表示すると、JavaScriptライブラリがページに含まれていて正しく実行されている場合、削除リンクに属性が表示されます。jquery-ujsjquery-railsdata-method

これはJavaScriptの問題であることに、私は喜んで賭けます—ドーナツにドル—。Railsはjquery_ujsスクリプトファイルを使用して、「削除」リンクがDELETE HTTP動詞を使用するようにします。これはPOSTアクションに似ていますが、リソースを削除する場合にのみ使用されます。それ以外の場合、リンクは単純な古いGETアクションとして終了します(JavaScriptが正しくロードされていない場合)。ERBレンダラーによって与えられたものに基づいてjquery_ujs新しいリンクタグを発行する責任があります(これがどのように機能するかについて間違っている場合は、誰かが私を修正できます。私は非常にうまくいく可能性があります)。data-methoddata-confirm

リンクタグがどのようにレンダリングされるかに基づいて、控えめなJavaScriptでは何かが正しくないと思います。これは、何が起こるべきかを説明します(具体的には、送信に関する部分:method => symbol)。この時点で、私はあなたに何を言うべきかわかりません。あなたのJavaScriptには間違いなく何かがあります。それもロードしていますか?ChromeまたはSafariを使用している場合は、Web Inspectorの[スクリプト]パネルを使用して、Rails Asset Pipelineが必要なスクリプト(jquery.jsおよびjquery_ujs.js)を取得しているかどうかを確認できます。Firefoxを使用している場合は、Firebugが最適です。それとは別に…私は途方に暮れています。ここに記載されていることはすべてあなたのために働くはずです。

于 2012-04-26T01:08:10.630 に答える
1

での呼び出しが原因wrapですviews/static_pages/home.html.erb

これ機能します:

<%= render 'shared/communityfeed' %>

これはしません:

<%= wrap render 'shared/communityfeed' %>

sanitizeこれは、ラップコードで使用しているためです。

特に許可されていないすべての属性を削除します。

于 2012-04-26T04:01:47.497 に答える
0

それで、何らかの理由でビューに<%= wrap render @Microposts %>あり<%= wrap render 'shared/communityfeed' %>、問題を引き起こしていたものでした。「ラップ」を削除すると、すべてが正常に機能し始めました。

ラップコード:

def wrap(content)
  sanitize(raw(content.split.map{ |s| wrap_long_string(s) }.join(' ')))
end

def wrap_long_string(text, max_width = 50)
  zero_width_space = "&#8203;"
  regex = /.{1,#{max_width}}/
  (text.length < max_width) ? text : 
    text.scan(regex).join(zero_width_space)
end

参照:https ://stackoverflow.com/questions/10326180/why-is-rails-not-rendering-method-delete-into-html#comment13310733_10326180

于 2012-04-26T15:47:33.247 に答える