Скаффолдинг с отношениями own_to и has_many: пути link_to для «Edit» и «Destroy» не работают - PullRequest
0 голосов
/ 10 апреля 2011

Мой проект позволяет семейной странице иметь несколько историй. Модели включают отношения - «Family has_many Stories» и «Story принадлежит семье». В файлеways.RB у меня есть следующее:

resources :families do
    resources :stories   
  end

В результате следующие маршруты для контроллера историй:

    family_stories GET    /families/:family_id/stories(.:format)          {:action=>"index", :controller=>"stories"}
                   POST   /families/:family_id/stories(.:format)          {:action=>"create", :controller=>"stories"}
  new_family_story GET    /families/:family_id/stories/new(.:format)      {:action=>"new", :controller=>"stories"}
 edit_family_story GET    /families/:family_id/stories/:id/edit(.:format) {:action=>"edit", :controller=>"stories"}
      family_story GET    /families/:family_id/stories/:id(.:format)      {:action=>"show", :controller=>"stories"}
                   PUT    /families/:family_id/stories/:id(.:format)      {:action=>"update", :controller=>"stories"}
                   DELETE /families/:family_id/stories/:id(.:format)      {:action=>"destroy", :controller=>"stories"}

Вот соответствующие методы контроллера:

  def edit
    @story = @family.stories.find(params[:id])
  end

  def destroy
    @story = @family.stories.find(params[:id])
    @story.destroy
    redirect_to family_stories_url, :notice => "Successfully destroyed story."
  end

Для index.html.erb код, сгенерированный изящными скаффолдингами, не учитывает отношения, а ссылки для «Показать», «Редактировать» и «Разрушить» не работают. После некоторых исследований я изменил код для этих ссылок следующим образом:

  <% for story in @stories %>
    <tr>
      <td><%= story.title %></td>
      <td><%= story.body %></td>
      <td><%= link_to "Show", [@family, story] %></td>
      <td><%= link_to "Edit", edit_family_story_path([@family, story]) %></td>
      <td><%= link_to "Destroy", [@family,story], :confirm => 'Are you sure?', :method => :delete %> </td>
    </tr>
  <% end %>

Ссылка "Показать" работает нормально при замене исходной переменной "story" на "[@family, story]". Ссылки «Удалить» и «Редактировать» не работают с аналогичными заменами.

Ссылка «Уничтожить» не вызывает ошибок, но действует так же, как ссылка «Показать» - запись не удаляется и вместо этого отображается (диалоговое окно: подтверждение никогда не отображается.) Ссылка «Редактировать» создает следующую ошибку:

"No route matches {:action=>"edit", :controller=>"stories", :family_id=>\#[Story id: 1, title: "story01 for family01", body: "body01 for story01 for family01", created_at: "2011-04-09 22:55:14", updated_at: "2011-04-09 22:55:14", family_id: 1]}"

Конструкция [@ family, story] хорошо работает для ссылки "Показать". Почему это не работает для ссылок "Редактировать" и "Разрушить"? Как мне изменить их для правильной работы?

1 Ответ

0 голосов
/ 27 апреля 2011

Это было вызвано конфликтующей конфигурацией JavaScript.

Разработчик приложений rails, который я использовал, поместил мой файл jquery.js в папку public / javascript, но в папке вызова jquery (мне пришлось переместить его на уровень выше.) 2) config / application.rb файл имел две строки конфигурации javascript. Я удалил один и убедился, что второй указал на файл jquery.js, упомянутый выше. С теми изменениями все работало

...