У меня есть неоднозначные маршруты или необходимо указать дополнительные параметры - PullRequest
1 голос
/ 08 февраля 2010

у меня есть:


в config/routes.rb

map.resources :projects do |project|
  project.resource :privacy
  end
end

в models/project.rb

belongs_to :privacy

в моделях / privacy.rb

has_one :project

в show.html.haml

= change_privacy_button(@project)

в доступном помощнике

  def change_privacy_button(project)
      button_builder("24gray/edit.png", "Edit Privacy Settings", edit_project_privacy_path(project), "change_privacy_settings")
  end

Это дает мне следующую ошибку:

Couldn't find Privacy without an ID (ActiveRecord::RecordNotFound)

Ошибка возникает:

http://localhost:3000/projects/:id/privacy/edit

Rake-маршруты подсказывают мне использовать:

edit_project_privacy GET
/projects/:project_id/privacy/edit(.:format)
{:action=>"edit", :controller=>"privacies"}

В отладчике я могу вызвать:

(rdb:1) project
#<Project id: 1...

(rdb:1) project
#<Project id: 1...

(rdb:1) project.privacy
#<Privacy id: 1...

(rdb:1) edit_project_privacy_path
ActionController::RoutingError Exception: edit_project_privacy_url failed to generate from {:action=>"edit", :controller=>"privacies"} - you may have ambiguous routes, or you may need to supply additional parameters for this route.  content_url has the following required parameters: ["projects", :project_id, "privacy", "edit"] - are they all satisfied?

Твои мысли? Спасибо! PS, все следующее также не удалось:

edit_project_privacy_path(project, project.privacy)

edit_project_privacy_path(project.id, project.privacy)

edit_project_privacy_path(project.privacy_id, project.privacy)

edit_project_privacy_path(project.privacy_id)

edit_project_privacy_path(project.privacy)

Ответы [ 2 ]

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

Я предполагаю, что @project не установлен, и по умолчанию, по вашему мнению, равен nil.

Переменные экземпляра инициализируются как ноль, а не сообщают, что они никогда не были установлены.

Как называется ваш подкласс ActiveResource или ApplicationController?

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

Вы пробовали:

edit_project_privacy_path(:project_id => project.id)

или

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