Как отправить форму двигателя rails3.1, отображаемую в основном приложении, для отправки контроллеру двигателя? - PullRequest
1 голос
/ 10 июня 2011

Я создаю новый движок rails3.1 для комментируемых функций.

Я создал движок, сгенерировал ресурс с именем Comment.

У движка config/routes.rb есть:

Kurakani::Engine.routes.draw do
  resources :comments
end

Приложение spec/dummy rails имеет ресурс с именем Post, а его маршруты:

Rails.application.routes.draw do

  resources :posts do
    resources :comments
  end

  mount Kurakani::Engine => "/kurakani"
end

Я установил связи между моделью комментариев движка и приложением фиктивных рельсовМодель поста.

Затем в приложении spec/dummy rails я выложил форму комментария в шаблоне поста show.Форма также генерируется с путем действия к post/1/comments.

Когда я запускаю спецификацию, я думаю, что она пытается найти контроллер внутри самого приложения spec/dummy вместо того, чтобы отправлять * 1023 движка*, поэтому я получаю следующую ошибку при запуске спецификации.

$ bundle exec rspec spec/integration/comments_spec.rb                                                                           ruby-1.9.2-p180
No examples matched {:focus=>true}. Running all.
Run filtered excluding {:exclude=>true}

/Users/millisami/gitcodes/kurakani/app/views/kurakani/comments/_form.html.erb:3:in `___sers_millisami_gitcodes_kurakani_app_views_kurakani_comments__form_html_erb___1787449207373257052_2189921740'
F

Failures:

  1) Kuraki::Comment authenticated user creating a new comment
     Failure/Error: click_button "Create"
     ActionController::RoutingError:
       uninitialized constant CommentsController
     # ./spec/integration/comments_spec.rb:29:in `block (3 levels) in <top (required)>'

Как я могу указать комментарий, который будет отправлен в comments_controller.rb движка вместо приложения spec/dummy ??

Если я не смог прояснить проблему, я поставил репо на https://github.com/millisami/kurakani

1 Ответ

0 голосов
/ 17 июня 2011

Проблема в том, что ваш маршрут для сгенерированной формы идет к /posts/:post_id/comments, который является маршрутом, определенным в вашем приложении , но не в вашем движке . Ваш двигатель определяет только этот маршрут:

resources :comments

Это (почти) работает, потому что движок видит, что у приложения есть маршрут, который соответствует CommentsController, просто нет CommentsController для него доступа.

Я скачал приложение с GitHub, поиграл и изменил form_for в app/views/kurakani/comments/_form.html.erb на следующее:

form_for(Kurakani::Comment.new, :url => kurakani.comments_path)

Этот тест проходит успешно, но я не уверен, что он действительно даст вам то, что вы хотите. Возможно, вы захотите поиграть с этим URL-адресом самостоятельно.

Здесь происходит то, что это представление отображается основным приложением с помощью помощника kurakani_list в spec/dummy/app/posts/show.html.erb, что означает, что любой помощник URL, на который вы ссылаетесь (прямо или косвенно), будет указывать на приложение а не к двигателю, как я думаю, вы хотите.

Таким образом, чтобы сообщить Rails, каков истинный маршрут, по которому мы хотим, чтобы наша форма шла, мы должны указать параметр :url и сказать, что мы хотим перейти к kurakani.comments_path, а не comments_path, который может быть определен приложением.

Если бы мы хотели сделать обратное (ссылаться на маршрут приложения из движка), мы бы использовали main_app вместо kurakani.

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