2012-05-22 70 views
1

我試着添加摧毀我的嵌套資源按鈕,收到此錯誤:No route matches [DELETE] "https://stackoverflow.com/users/1/2/4/5/holidays/7"嵌套資源破壞行動

繼承人的我看來,路線,車型的相關部分,&控制器:

<% @user.holidays.each do |h| %> 
    <td><%= h.name %></td> 
    <td><%= h.date %></td> 
    <td> 
    <%= button_to('Destroy', user_holiday_path(@user.holidays), :method => 'delete', :class => 'btn btn-large btn-primary') %> 
    </td> 
<% end %> 

路線

resources :users do 
    resources :interests 
    resources :holidays 
end 

模型

class User < ActiveRecord::Base 
    has_many :holidays, :through => :user_holidays 
end 

class UserHoliday < ActiveRecord::Base 
    attr_accessible :holiday_id, :user_id 
    belongs_to :user 
    belongs_to :holiday 
end 

class Holiday < ActiveRecord::Base 
    attr_accessible :name, :date 
    has_many :user_holidays 
    has_many :users, :through => :user_holidays 

end 

控制器

class HolidaysController < ApplicationController 
    def index 
    @user_holidays = Holiday.find(params[:user_id]) 
    @holidays = @user_holidays.holidays 
    end 

    def new 
    end 

    def show 
    @holiday = Holiday.find(params[:id]) 

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

    def destroy 
    @holiday = Holiday.find(params[:id]) 
    @holiday.destroy 
    end 
end 

謝謝!

+1

@ rb512低於正確的答案,但我想指出的是,你應該使用更多描述性名稱的變量。你在視圖中使用'h',但這應該更像'假日'。除了清晰之外,'h'也是[html_escape的別名](http://api.rubyonrails.org/classes/ERB/Util.html#method-c-h),因此可以消除一些混淆。 –

回答

2

更改此:
<%= button_to('Destroy', user_holiday_path(@user.holidays), :method => 'delete', :class => 'btn btn-large btn-primary') %>
這樣:
<%= button_to('Destroy', user_holiday_path(h), :method => 'delete', :class => 'btn btn-large btn-primary') %>

更新

更改破壞行動來自:
@holiday = Holiday.find(params[:id])
@user_holiday = UserHoliday.find(params[:id])

,並在您的視圖:
變化
<% @user.holidays.each do |h| %>

<% @user.user_holidays.each do |h| %>

你的協會需要一定的修正,應該是如下:
user has_many user_holidays
user_holiday has_one holiday
user_holidays belongs_to user

您可以通過您的H訪問對象的姓名和假期:
h.holiday.name
h.holiday.date

+0

謝謝!唯一的問題是,這是從我的「假期」表中刪除預填充的數據,而不是與用戶在「user_holidays」表中相關的實際記錄。 – js111

+0

我應該如何更改我的銷燬操作? – js111

+0

現在這個錯誤:「未定義的方法'假期爲零:NilClass」..也,用戶ID不正確的參數在這個錯誤中顯示,所以它可能是什麼? – js111