2016-03-29 4 views
1

Я пытаюсь удалить конкретную «работу» из массива «работ», который встроен в пользователя.Метод Destroy в рельсах и Mongoid

В моем файле work.html.erb в просмотров: -

<% @works.each do |f| %> 
     <%= link_to 'Destroy', profiles_destroy_path(f), data: {:confirm => 'Are you sure?'}, :method => :delete %> 
<% end %> 

И в моем контроллер: -

def destroy 
@work = current_user.works.find(params[:id]) 
@work.destroy 
respond_to do |format| 
    format.html { redirect_to root_url } 
end 
end 

Я получаю следующее сообщение об ошибке: -

Mongoid::Errors::InvalidFind at /profiles/destroy.56fa4d2f498b5908a002e2e8 

PS - Я новичок в рельсах.

ответ

0

params[:id] не nil. В начале сеанса нет: id, и вы получаете исключение Mongoid::Errors::InvalidFind выше.

0

удаления действия не путь по умолчанию ..

<%= link_to 'Destroy', profiles_path(f), data: {confirm: 'Are you sure?'}, method: :delete %> 

Это будет вызывать действие уничтожить от контроллера.

И убедитесь, что параметры [: id] не ноль.

PS: использование рельсов 4 аннотации (не использовать ракеты (=>))

+1

рельсы 4 аннотации? Кроме того, нет ничего плохого в хэш хетчках. –

+0

ups извините, да, это не рельсы4, это от рубинового ядра. он не имеет ничего плохого, но для меня добавляет ненужную многословие. @SergioTulentsev :) –

+0

@JuanManuelRodulfoSalcedo показывает параметры [: id] - это нуль. Можете ли вы сказать мне, как решить эту проблему. Мне нужно что-то написать в файле routes.rb. –

0

Там может быть ошибка в ответе Хуана.

Я считаю, что вы хотите:

<%= link_to 'Destroy', profile_path(f), method: :delete, data: {confirm: 'Are you sure?'} %> 

Примечание: сингулярный «PROFILE_PATH» вместо «profiles_path»

Это потому, что уничтожить действие использует один и тот же путь, что и шоу действия, но использует DELETE вместо GET. (Что вы можете наблюдать, управляя «рейк-маршрутами» в вашем терминале и сравнивая два маршрута.)

Смежные вопросы