Уничтожить метод перестал работать - PullRequest
0 голосов
/ 02 мая 2011

У меня есть две модели: страница и авторы, когда я выбираю метод уничтожения, он просто возвращает страницу показа. Модели связываются, сообщая модели, что автор has_many: pages и страница принадлежит многим: author.

это код для моего контроллера страницы:

class PagesController < ApplicationController

def index
@pages = Page.find(:all, :order => 'created_at DESC')
end

def show
@page = Page.find(params[:id])
end

def new
@page = Page.new
end

def edit
@page = Page.find(params[:id])
end

def create
@page = Page.new(params[:page])

if @page.save
      redirect_to(@page, :notice => 'Page was successfully created.')
  else
      render :action => "new"
  end
end

def update
@page = Page.find(params[:id])

  if @page.update_attributes(params[:page])
    redirect_to(@page, :notice => 'Page was successfully updated.')
  else
    render :action => "edit"
  end
end

def destroy
@page = Page.find(params[:id])
@page.destroy
end

def author
@pages = @author.pages
end

end

Где я должен искать решение этой проблемы, когда я нажимаю «уничтожить», он отправляет меня на страницу, чтобы уничтожить, но не более того, нет: появляется уведомление, просто кажется, что у него нет метода уничтожения.

Спасибо

Ответы [ 3 ]

1 голос
/ 02 мая 2011

Я не знаю, что вы подразумеваете под

выберите метод уничтожения

Но я предполагаю, что вы просто используете URL-адрес pages/:id в своем браузере? Это действие show, как вы сказали.

Чтобы действительно уничтожить вашу модель (т.е. получить доступ к действию destroy в контроллере), вам необходимо отправить DELETE на /pages/:id.

Обычно это делается с помощью чего-то вроде:

<%= link_to 'Destroy', @page, :confirm => 'Are you sure?', :method => :delete %>

Обратите внимание на :method => :delete. Это на самом деле отправит DELETE контроллеру (при условии, что у вас есть rails.js, чтобы позаботиться об этом) и, таким образом, отобразит действие destroy вместо действия show

0 голосов
/ 02 мая 2011

Вы отключили JavaScript в своем браузере? :)

0 голосов
/ 02 мая 2011

Несколько вещей, на которые нужно посмотреть:

  • Не ясно, какой тип HTTP-запроса вы отправляете в свое приложение. Тот факт, что действие show кажется активированным, заставляет меня думать, что ваш запрос является методом HTTP GET. Если вы хотите, чтобы действие уничтожения было вызвано, убедитесь, что это метод HTTP DELETE.

  • Вы проверили свою базу данных, чтобы увидеть, был ли уничтожен ActiveRecord? Возможно, вы не видите никаких уведомлений просто потому, что не устанавливаете мгновенное уведомление. Например:


def destroy
  @page = Page.find(params[:id])
  flash[:notice] = "Page successfully removed" 
  @page.destroy
  # You may also want to have a redirect here, e.g. redirect_to @pages
end
  • В отдельном примечании не уверен, чего вы пытаетесь достичь с помощью метода author в вашем контроллере, но он выглядит неправильно Это не успокаивает, и, кажется, возвращает массив страниц, а не автора.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...