当我尝试删除communityfeed_item / micropost的内容时,我收到以下错误:
Routing Error
No route matches [GET] "/microposts/45"
Try running rake routes for more information on available routes.
我检查我的路线,看到删除和发布,这是我真正需要的功能,但我一直收到“获取”错误。
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中的视图代码包含一个删除方法:
<% 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</a>
<a href="/microposts/47" title="ddsf">delete</a>
等。尽管这是嵌入式红宝石:
<% if current_user?(communityfeed_item.user) %>
<%= link_to "delete", communityfeed_item, method: :delete,
confirm: "You sure?",
title: communityfeed_item.content %>
<% end %>
在routes.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
答案 0 :(得分: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
之类的内容,因为旧版本的jquery-ujs
或jquery-rails
会加载data-method
。当您查看呈现页面的源时,如果JavaScript库包含在页面上并正常运行,您应该在删除链接上看到jquery_ujs
属性。
我愿意打赌 - 美元到甜甜圈 - 这是一个JavaScript问题。 Rails使用jquery_ujs
脚本文件来确保“删除”链接使用DELETE HTTP谓词,这类似于POST操作,但仅在删除资源时使用。否则,链接最终将作为普通的旧GET操作(如果JavaScript未正确加载)。 data-method
负责根据ERB渲染器提供的内容,使用data-confirm
和:method => symbol
等内容发出新的链接标记(如果我对错误的解释,有人可以纠正我;我很可能是。)
根据您的链接标记呈现的内容,我会说使用不引人注目的JavaScript会出现问题。 This describes what should be happening(具体而言,关于发送jquery.js
的部分)。在这一点上,我不知道该告诉你什么;你的JavaScript肯定会出现问题。它甚至加载?如果您使用的是Chrome或Safari,则可以使用Web Inspector中的“脚本”面板查看Rails Asset Pipeline是否提取了必要的脚本(jquery_ujs.js
和{{1}});如果您使用的是Firefox,那么Firebug就是您的最佳选择。除此之外......我很茫然。这里陈述的所有内容都适合你。
答案 1 :(得分:1)
这是因为wrap
中对views/static_pages/home.html.erb
的调用。
此 工作:
<%= render 'shared/communityfeed' %>
这不是:
<%= wrap render 'shared/communityfeed' %>
这是因为你在包装代码中使用sanitize
:
它删除了所有未明确允许的属性。
答案 2 :(得分:0)
因此,<%= wrap render @Microposts %>
和<%= wrap render 'shared/communityfeed' %>
视图中的某些原因导致了问题。当我删除'wrap'时,一切都开始正常。
包装代码:
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 = "​"
regex = /.{1,#{max_width}}/
(text.length < max_width) ? text :
text.scan(regex).join(zero_width_space)
end