Rails 3 метод edit_path не работает - PullRequest
1 голос
/ 19 марта 2011

извините, если это тупой вопрос, это мой первый проект на Rails3 ...

По какой-то причине этот <%= link_to 'edit', edit_geofence_path(geofence) %>

отображается как <a href="/geofence/edit.2">edit</a> (идентификатор моей геозоны2).

И <%= link_to 'delete', {:action=>'destroy', :id=>geofence}, :confirm=>"You sure?", :method=> :delete %>

рендерится как <a href="/geofence?id=2" data-confirm="You sure?" data-method="delete" rel="nofollow">delete</a>,

, что может быть хорошо, но при нажатии на ссылку в логах это генерируется Started GET "/geofence?id=2".Так что, не УДАЛИТЬ, просто ПОЛУЧИТЬ.

Мой файл rout.rb - просто resource :geofence.

В связанной заметке по какой-то причине действие по умолчанию для геозоны - "показать".Поэтому / geofence / НЕ вызывает метод index, он вызывает метод show.Я думаю, что это также должно быть неправильно.

Я уже проклинаю это приложение, я собираюсь взять день, чтобы остыть, и надеюсь, что этот ПРОСТОЙ ЛЕС будет работать завтра вечером ... Помогите мне, переполнение стека!Ты моя единственная надежда!

Ответы [ 3 ]

2 голосов
/ 19 марта 2011
<%= link_to 'delete', {:action=>'destroy', :id=>geofence}, :confirm=>"You sure?", :method=> :delete %>

должно быть:

<%= link_to 'delete', {:action=>'destroy', :id=>geofence}, :confirm=>"You sure?", :method=> :delete, :remote => true %>

Без: remote => true, щелчок не обрабатывается javascript.

И в вашем файле rout.rb вы должныопределите это как:

resources :geofence

Установка его в качестве ресурса подразумевает, что есть только один, и вызывает много вашего странного поведения.

0 голосов
/ 19 марта 2011

Когда вы используете resource :geofence в своем файле маршрутов, вы сообщаете приложению, что существует только один ресурс геозоны, и что он не является коллекцией. Вы получите show, update, create, new, но не index - и значение id не будет использовано, поскольку существует только один ресурс. (Действие show здесь будет иметь путь /geofence

Если вы используете resources :geofences (обратите внимание на множественное число), тогда вы определили набор ресурсов, /geofences теперь даст вам действие index, и ваши помощники по URL будут корректно работать с рендерингом действия show /geofences/3.

Надеюсь, это поможет вам понять, почему форма множественного числа необходима для такого рода ресурсов:)

0 голосов
/ 19 марта 2011

В качестве примечания, чтобы завершить ответ ctide , я бы предложил вам использовать в качестве соглашения множественную форму имени вашего контроллера.Звучит более естественно:

resources :geofences

внутри вашего rout.rb файла.

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

...