在Ruby on Rails應用程序中,有一段時間裏有一個讓我困惑的問題。我在3個不同的環境中測試了相同的工作流程,並且沒有一個能夠讓「銷燬」鏈接正常工作!爲什麼我的RoR銷燬鏈接不起作用?
使用該設置:
- RVM 1.17.4
- 紅寶石1.9.3p327
- 滑軌3.2.9
然後,執行從字面上看,這些命令:
$ rails new foo
$ cd foo/
$ rails g scaffold bar title:string
$ rake db:migrate
它生成這個控制器:
# DELETE /bars/1
# DELETE /bars/1.json
def destroy
@bar = Bar.find(params[:id])
@bar.destroy
respond_to do |format|
format.html { redirect_to bars_url }
format.json { head :no_content }
end
end
這是破壞行認爲:
<%= link_to 'Destroy', bar, method: :delete, data: { confirm: 'Are you sure?' } %>
這是最後一頁代碼:
<a href="/bars/1" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a>
在佈局我有這些:
<%= stylesheet_link_tag "application", :media => "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
而在application.js我有這些:
//= require jquery
//= require jquery_ujs
//= require_tree .
這些都是在HTML輸出線:
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/bars.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
這些路線:
bars GET /bars(.:format) bars#index
POST /bars(.:format) bars#create
new_bar GET /bars/new(.:format) bars#new
edit_bar GET /bars/:id/edit(.:format) bars#edit
bar GET /bars/:id(.:format) bars#show
PUT /bars/:id(.:format) bars#update
DELETE /bars/:id(.:format) bars#destroy
任何人都得出了同樣的結果嗎?爲什麼它不起作用?
我在互聯網上找到的解決方法是建議JavaScript沒有正確加載,有時建議將操作從DELETE更改爲GET。有些人建議改變一個按鈕的鏈接。無論如何,這個確認從來沒有出現,而且在所有視圖中重寫所有的銷燬行爲真的很煩人。
爲什麼你的link_to裏沒有@ infront的酒吧? – TomJ
嗨,TomJ,這是因爲這是在索引頁面,所以它是在一個循環內。 「@ bar」實際上是所有條目的列表。 = D – Apollo
你的控制檯日誌說什麼?應該看起來像這樣: 開始刪除「/ posts/2」爲127.0.0.1於2012-12-29 16:17:36 -0500 通過PostsController處理#銷燬爲HTML 參數:{「authenticity_token」=>「 Z7MWoO6XliYLHX4qUrnrnrS23QnTTxltq + sCmRhmZ9Y =「,」id「=>」2「} 後加載(0.2ms)選擇」posts「。* FROM」posts「WHERE」posts「。」id「=? LIMIT 1 [[「id」,「2」]] (0.1ms)begin transaction SQL(17.6ms)DELETE FROM「posts」WHERE「posts」。「id」=? [[「id」,2]] (36.3ms)commit transaction 重定向到http:// localhost:3000/posts 已完成302在61ms中找到(ActiveRecord:54.3ms) – TomJ