0

У меня есть две модели, пользователи и материалы. Пользователи могут использовать любимые материалы. Я установил отношения, и код для favouriting работает нормально, но я не могу получить код для неудобства. У меня есть следующий код для unfavouriting:Удаление записей с использованием форм в рельсах 3.2

Материалы Контроллер (в шоу-акции, где unfavourite форма есть)

@favourite = Favmat.where(:user_id => current_user.id, :material_id => @material.id) 

Примечание: Я использую этот код, чтобы решить, какую кнопку, чтобы показать в представлении. Предполагая, что запись существует, мы получаем следующее:

Посмотреть

<%= form_for @favourite, :method => :delete do |f| %> 
<%= f.submit "Unfavourite" %> 
<% end %> 

Проблема, кажется, здесь. Ничто из того, что я делаю, не дает мне рабочего пути к действию destroy в контроллере favmats. Я попытался использовать form_tag, но потом я получаю очень странные маршруты, которые не работают.

Favmats Контроллер

def destroy 
    Favmat.find(params[:id]).destroy 
    respond_to do |format| 
    format.html { redirect_to @material } 
    format.js 
    end 
end 

Update

Я также попытался с помощью link_to вместо формы. Код выглядит следующим образом:

<%= link_to "Unfavourite", favmat_path, method: "delete" %> 

странные вещи, что HTML для этого принимает favmat идентификатор из материала, не является объектом favmat. Я не знаю, как получить идентификатор объекта favmat. Ничто не работает.

+0

Вы получаете ошибку? Если бы я был на вашем месте, я бы справился с «неудобством» в 'material_controller', как действие участника. –

+0

У меня есть ошибка, да. Я думал о том, чтобы иметь дело с неудобством в контроллере материалов, но он уже довольно толстый, и, похоже, имеет смысл иметь действия, связанные с моделью Favmats в контроллере Favmats. – Finnjon

+0

Какая ошибка вы получаете? Не могли бы вы вставить все backtrace? Возможно ли это 'undefined method model_name ...'? –

ответ

1

Попробуйте прохождение @favourite объекта вместо favmat_path к link_to:

<%= link_to "Unfavourite", @favourite, method: :delete %> 
+0

Я получаю: undefined method 'model_name 'для ActiveRecord :: Relation: Class – Finnjon

+1

@Finnjon попробуйте заменить' @favourite = Favmat.where (: user_id => current_user.id,: material_id => @ material.id) 'с' @ favorite = Favmat.where (: user_id => current_user.id,: material_id => @ material.id) .first' –

+0

Спасибо, это работает! Но зачем он нужен «первым», когда возвращается только одна запись (поскольку каждая из них уникальна)? – Finnjon

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

  • Нет связанных вопросов^_^