Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Откуда берётся ... method => :delete... ? 
:(
    Опции темы
pupadupa
Дата 8.12.2008, 05:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



Добрый вечер.
Начал изучать RoR. Сгенерил простой weblog (по анологии http://ruby.inuse.ru/video-uroki/razrabotk...oshchi-netbeans ) т.е. просто scaffold Post title:string    . Использую IDE NetBeans

В итоге вижу в файле index.html.erb :
Код

<% for post in @posts %>
  <tr>
    <td><%=h post1title %></td>
    <td><%= link_to 'Show', post %></td>
    <td><%= link_to 'Edit', edit_post_path(post) %></td>
    <td><%= link_to 'Destroy', post, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>


Вопрос:
почему :method => :delete  ?

хотя в  файле posts_controller.rb записано :
Код

 def destroy
    @post = Post.find(params[:id])
    @post.destroy

    respond_to do |format|
      format.html { redirect_to(posts_url) }
      format.xml  { head :ok }
    end

Поиском я нашёл, что есть в проекте файл posts_controller_test.rb и в нём указано:
Код

 test "should destroy post" do
    assert_difference('Post.count', -1) do
      delete :destroy, :id => posts(:one).id
    end


Но я вот не пойму причём тут этот posts_controller_test.rb   ? и где он цепляется у меня ?
Если не сложно, объясните на пальцах принцип.... зачем этот posts_controller_test.rb  , где он цепляется, почему нельзя использовать :method => :destroy (ошибку сервера выдаёт)  ???

Спасибо.


Это сообщение отредактировал(а) pupadupa - 8.12.2008, 06:00
PM MAIL   Вверх
shine
Дата 8.12.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 20.10.2006

Репутация: 3
Всего: 5



posts_controller_test.rb - файл с автоматическими тестами для контроллера PostsController. Создается он, насколько я помню, при генерации контроллеров через ruby script/generate. Цепляется он при запуске функциональных тестов или при запуске всех тестов сразу.

delete - это HTTP заголовок, а destroy - это интерфейс ресурса Post. То есть это принципиально разные вещи.
--------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin
PM MAIL   Вверх
pupadupa
Дата 8.12.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



Спасибо. Буду разбираться дальше.

а нет какой-нить ссылочки чтобы почитать про это? в гугле найти не могу.

Просто как-то странно: создался (при автоматической генерации) класс PostsControllers  в нём определён метод destroy, а во вьюхе index.html.erb этот destroy не задействован, а используется delete, который вообще непонятно что такое.


Нашёл другой пример (http://www.tutorialspoint.com/ruby-on-rails-2.1/rails-controllers.htm), в нём всё создаётся вручную (без автоматической генерации) и  в этом примере всё понятно:
1)
Есть book_controller.rb
Код

   def delete
      Book.find(params[:id]).destroy
      redirect_to :action => 'list'
   end

2)
А потом делается view, которая вызывает метод :delete
Creating view file for delete method:
Код

<li>
<%= link_to c.title, {:action => 'show', :id => c.id} -%>
<b> <%= link_to 'Edit', {:action => 'edit', :id => c.id} %></b>
<b> <%= link_to "Delete", {:action => 'delete', :id => c.id},
:confirm => "Are you sure you want to delete this item?" %></b>
</li>


Почему при автоматической генерации не так полчается? Очень запутанно как-то. Хочется разобраться детально, в чём разница подходов, в чём плюсы/минусы, почему при автоматической генерации делается так запутанно (как мне показалось) и как это всё работает.

Спасибо!
PM MAIL   Вверх
shine
Дата 8.12.2008, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 20.10.2006

Репутация: 3
Всего: 5



Почитайте про ресурсы и их реализацию в Rails. Вот неплохая статья: http://www.taknado.com/2007/8/31/rest-on-rails

Если нужно очень кратко, то посмотрите 7-ю страницу здесь: http://media.rubyonrails.org/presentations...ofresources.pdf
--------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin
PM MAIL   Вверх
pupadupa
Дата 8.12.2008, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



Спасибо огромное за ссылки!!!!

Начинает прояснятся картина.

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

  <td><%= link_to 'Destroy', post, :confirm => 'Are you sure?', :method => :delete %></td>

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

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


З.Ы. мда... интересный подход! если честно я про HTTP то и не думал никогда
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0779 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.