Ruby On Rails in UA Icon_home Главная Add to bookmarks Translate translate Profile Войти
Регистрация Форум Блоги Пользователи Список джемов Rails проекты      Поиск   

Ruby On Rails in UA/Программирование на ROR/:method=>"delete", а в контроллере destroy

2008-08-02 20:26:42 Ответить  
Aries01
Антон
Адрес:
Сообщений: 7
Регистр: 2008-08-02
его блог 0 сообщ.
:method=>"delete", а в контроллере destroy
  •  
Здрасте всем.
Тут такая проблема. Есть таблица categories и в модели прописано acts_as_tree. В контроллере метод destroy прописан так:
def destroy
@category = Category.find(params[:id])
@category.destroy
respond_to do |format|
format.html { redirect_to(articles_url) }
format.xml { head :ok }
end
end

в представлении индекс строка:
'Are you sure?', :method => "destroy"%>

вызывает ошибку "500 internal server error"
но если заменить в ней :method => "destroy" на :method =>"delete" (особая магия какая-то), то эта ошибка уже не появляется, а появляется другая.

Mysql::Error: Unknown column 'Category' in 'order clause': SELECT * FROM `categories` WHERE (categories.parent_id = 21) ORDER BY Category

Эта ошибка мне больше нравится, но тут тоже непонятно, как ее исправить.
Может кто подскажет?
, , ,
2008-08-02 22:23:36 Ответить  
admin
Ruslan Voloshin
Адрес: odessa
Сообщений: 1294
Регистр: 2007-03-13
его блог 40 сообщ.
RE: :method=>"delete", а в контроллере destroy
  •  
на счет destroy и delete тебе стоит внимательно почитать особенности ресурсов.
а сиквельная ошибка появляется, так смотри что приходит и как это работает.
Удобней вообще то это все делать под линуксом, или же поставить cigwin
------------
Занимаюсь вебом и продвижением сайтов.
2008-08-02 22:58:35 Ответить  
Aries01
Антон
Адрес:
Сообщений: 7
Регистр: 2008-08-02
его блог 0 сообщ.
RE: RE: :method=>"delete", а в контроллере destroy
  •  
Короче нашел я в чем ошибка )
Как всегда обидная )
в модели category.rb было написано: acts_as_tree :order = name
а надо было acts_as_tree :order = 'name'
так как я не поставил эти апострафы, он по умолчанию вместо name подставил имя модели и в запросе к БД пытался упорядочить по полю category, которого нет...
Вот так вот.
И где почитать про ресурсы можно?
А почему под линем или cigwin удобнее?
2008-08-03 09:31:55 Ответить  
romb
Roman V. Babenko
Адрес: Kyiv
Сообщений: 310
Регистр: 2008-04-22
его блог 6 сообщ.
RE: RE: RE: :method=>"delete", а в контроллере destroy
  •  
ИМХО, шо даже так

acts_as_tree :order => :name


Под "линем" у тебя нормальная поддержка utf-8, нормальный shell(bash).
Ну и в конечном то итоге приложение будет работать под какой нить OSX, так и разрабатывать логично под ней.

А ошибки 500 надо ловить не руками, а внимательно читать {app}/log/development.log или какой там у тебя режим запущен.
------------
http://romanvbabenko.blogspot.com Если в споре не родилась истина, то, по крайней мере, один из спорящих бесплоден.
2008-08-03 12:06:32 Ответить  
Aries01
Антон
Адрес:
Сообщений: 7
Регистр: 2008-08-02
его блог 0 сообщ.
RE: RE: RE: RE: :method=>"delete", а в контроллере destroy
  •  
Спасибо огромное. Очень полезная информация )
2008-08-03 13:55:15 Ответить  
admin
Ruslan Voloshin
Адрес: odessa
Сообщений: 1294
Регистр: 2007-03-13
его блог 40 сообщ.
RE: RE: RE: RE: RE: :method=>"delete", а в контроллере destroy
  •  
просто под линуксом ты в онлайне будешь видеть в логах все происходящее

или тоже самое под cigwin
------------
Занимаюсь вебом и продвижением сайтов.
,
2008-12-08 14:54:46 Ответить  
pupadupa
pupadupa
Адрес:
Сообщений: 2
Регистр: 2008-12-08
его блог 0 сообщ.
RE: :method=>"delete", а в контроллере destroy
  •  
Добрый день.

Решил продолжить тему:
Мне вот тоже непонятно откуда и зачем берётся delete (при автоматической генерации scaffold),а destroy не используется во вью:

файл index.html.erb :

файл posts_controller.rb:


Почему создаётся метод Destroy, а во view используется delete ?

Спасибо.
2008-12-08 17:32:10 Ответить  
pupadupa
pupadupa
Адрес:
Сообщений: 2
Регистр: 2008-12-08
его блог 0 сообщ.
RE: :method=>"delete", а в контроллере destroy
  •  
вроде разобрался:


я так понял, что в этой строчке

delete это как раз передоваемый от клиента к серверу HTTP заголовок, а не метод класса (как я подумал). Т.о. получается, что ресурсу (в терминологии REST ) передаётся:
url (ссылка по которой мы переходим) + DELETE (в HTTP заголовке) и ресурс отвечает на это методом DESTROY (метод описанный в контроллере).

Я правильно понял?


З.Ы. мда... интересный подход! если честно я про HTTP то и не думал никогда
З.З.Ы. ссылка которая помогла разобраться http://www.taknado.com/2007/8/31/rest-on-rails
Назадназад Новыйновый Ответитьответить
Ключевые слова:
Гости: 191 Онлайн: 0
Rambler's Top100
О проекте по всем вопросам обращайтесь на support
Rubyclub.com.ua Copyright © 2007 - 2008