Рубин на рельсовых путях и маршрутах - PullRequest
0 голосов
/ 12 января 2010

Я пытаюсь освоить базовую маршрутизацию Rails. У меня есть модель с именем page, которую я создал с помощью скаффолда. Я добавил метод addchild, доступ к которому я хотел бы получить через

'pages/addchild/:id'

Пока все хорошо. Однако я хочу настроить ссылку на этот метод следующим образом:

<%= link_to 'Add child page', addchild_page_path(page) %>

Передача идентификатора текущей страницы в качестве параметра.

Когда я загружаю свое индексное представление (где ссылка), я получаю следующее сообщение:

undefined local variable or method `addchild_page_path' for    #<ActionView::Base:0xb67797d0>

Я неправильно понял, как работает метод path / link_to?

Мой файл маршрутов выглядит так:

  map.resources :pages
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'

Любой совет будет принят с благодарностью.

Спасибо.

1 Ответ

2 голосов
/ 12 января 2010

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

Поскольку вы упомянули, что использовали скаффолдинг, вы, вероятно, настроили маршрут в качестве ресурса, поэтому все, что вам нужно сделать, это добавить метод:

map.resources :pages, :member => {:addchild => :get}

даст вам addchild_pages_path (и фактически созданный путь будет выглядеть как /pages/:id/addchild

Затем вы используете его следующим образом: addchild_pages_path page, не вызывайте метод id напрямую, так как он не ресурсоемкий (вы не будете использовать to_param в классе страницы, что может потребоваться сделать позже).

Если вы действительно хотите, чтобы URL отображался как /pages/addchild/:id (что я не рекомендую), вы можете добавить

map.addchild_page "/pages/addchild/:id", :controller => :pages, :method => :addchild

перед строкой map.resources :pages в вашем rout.rb, а затем используйте метод пути, как указано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...