Разрушать? Удалить? Что тут происходит? Рельсы 2.3.5

Я новичок в рельсах. Моя версия рельсов 2.3.5. Я нашел использование, например:

В контроллере определен метод уничтожения, и вы можете использовать :action => «delete», чтобы запустить этот метод. Разве имя действия не должно совпадать с именем метода? Почему удаление отображается на уничтожение?

Опять же, в моем контроллере я определяю метод с именем destroy для удаления записи. В представлении у меня есть <%= link_to "remove", :action => 'destroy', :id => myrecord %>. Но на практике это никогда не работает. Каждый раз, когда я нажимаю на ссылку удаления, она перенаправляет меня в режим просмотра, показывающий содержимое записи. Я почти уверен, что мой метод уничтожения:

def destroy
    @myobject = MyObject.find(params[:id])
    @myobject.destroy
    @redirect_to :action = 'index'
end

Если я изменю имя метода с destroy на что-то вроде remove_me и изменю имя действия на remove_me в представлении, все будет работать так, как ожидалось.

В двух вышеупомянутых странных проблемах я уверен, что в моей конфигурации нет сложной маршрутизации.

В общем, кажется, что уничтожение и удаление являются загадочными ключевыми словами в рельсах. Кто-нибудь может мне это объяснить?


person Steve    schedule 07.03.2010    source источник
comment
Если вы наведете курсор на ссылку, представленную link_to, куда она вас приведет? Если вы просматриваете исходный код в HTML, чем отличается ссылка в разных ситуациях?   -  person Dan Rosenstark    schedule 07.03.2010


Ответы (3)


Вероятно, вы установили MyObject в качестве ресурса в route.rb. Ресурсы получают пару маршрутов, которые напрямую не совпадают с названием действия. Когда вы используете имя действия, которое не соответствует маршрутам, определенным ресурсом, вы получите маршрут по умолчанию, который напрямую соответствует имени действия.

Я обнаружил, что эта ссылка очень хорошо объясняет маршрутизацию рельсов. Взгляните на раздел «RESTful-маршрутизация».

person sepp2k    schedule 07.03.2010

Если вы используете маршрутизацию REST, destory поддерживает только метод удаления. вы можете изменить свой код следующим образом

 link_to "remove", :action => 'destroy', :id => myrecord", :method => :delete

Добавление :method => :delete rails добавит скрытый ввод с именем "_method", значением "delete"

person allenwei    schedule 07.03.2010

Замените все :post => true на :method => :post

person Shawn Hill    schedule 06.07.2010