ОБНОВЛЕННЫЙ КОД в нижней части
Я создаю приложение для голосования по истории с помощью книги просто Rails 2.Я получаю эту ошибку, когда нажимаю кнопку, чтобы проголосовать за историю:
No route matches "/stories/4-pure-css-icons-showcase"
Мой файл маршрутизации выглядит следующим образом:
Shovell::Application.routes.draw do
get "votes/create"
root :to => "stories#index"
resources :stories do
resources :votes
end
end
Vote_controller.rb:
class VotesController < ApplicationController
def create
@story = Story.find(params[:story_id])
@story.votes.create
end
end
create.rsj:
page.replace_html 'vote_score', "Score: #{@story.votes.size}"
page[:vote_score].visual_effect :highlight
show.html.erb:
<h2>
<span id="vote_score">
Score: <%= @story.votes.size %>
</span>
<%= @story.name %>
</h2>
<p>
<%= link_to @story.link, @story.link %>
</p>
<div id="vote_form">
<%= form_tag :url => story_votes_path(@story), :remote => true do %>
<%= submit_tag 'shove it' %>
<% end %>
</div>
story.rb:
class Story < ActiveRecord::Base
validates_presence_of :name, :link
has_many :votes
def to_param
"#{id}-#{name.gsub(/\W/, '-').downcase}"
end
end
До этого я работал над множеством других ошибок, связанных с устаревшим кодом и т. Д., Поэтому в настоящий момент я чувствую себя несколько потерянным.Кажется, это просто проблема с маршрутизацией, но так как я работал с ошибками AJAX, которые также связаны с функцией голосования, я хотел опубликовать эти файлы на случай, если это будет больше, чем маршрутизация.
Он говорит, что ни один маршрут не соответствует "/stories/4-pure-css-icons-showcase"
, но когда я захожу на "/stories"
(мой корень) и нажимаю на ссылку, чтобы перейти на "/stories/4-pure-css-icons-showcase"
, он работает нормально, однако после нажатия на кнопку голосования я получаю эту ошибку.Как вы, вероятно, могли бы сказать после прочтения кода, предполагается обновить счетчик голосов и выполнить :highlight
через ajax.
ОБНОВЛЕНИЕ:
Измененный код (все изменения выполняются по совету Сэма):
маршруты:
Shovell::Application.routes.draw do
resources :votes
root :to => "stories#index"
resources :stories do
resources :votes
end
show.html.erb:
<div id="vote_form">
<%= form_tag :url => new_story_vote_path(@story), :remote => true do %>
<%= submit_tag 'shove it' %>
<% end %>
</div>
Vote_controller.rb
class VotesController < ApplicationController
def create
@story = Story.find(params[:story_id])
@story.votes.create
respond_to do |format|
format.html
format.js
end
end
Проблема все та же, но я думаю (читай: надеюсь), что мы делаем успехи!
Сценарий: Моя страница индекса (/stories
) в случайном порядкеотображает историю из базы данных; когда вы нажимаете на ссылку, она ведет на внутреннюю страницу истории (например, /stories/2-sitepoint-forums
) на этой странице, она отображает количество голосов, которые имеет история, и имеет кнопку, чтобы проголосовать за нее.Когда вы нажимаете кнопку голосования, предполагается использовать ajax для обновления @story.vote.size
и использовать визуальный эффект :highlight
.Однако проблема в том, что когда вы нажимаете кнопку голосования, страница превращается в страницу «Ошибка маршрутизации», которая отображает:
No route matches "/stories/2-sitepoint-forums"
Это странно для меня, потому что вы на самом деле можете бытьмаршрутизируется по этому адресу, и вы по ссылке на первой странице ...
Вот ошибка в консоли:
Started POST "/stories/2-sitepoint-forums?url=%2Fstories%2F2-sitepoint-forums%2F
votes%2F2-sitepoint-forums&remote=true" for 127.0.0.1 at 2010-11-08 16:30:17 -08
00
ActionController::RoutingError (No route matches "/stories/2-sitepoint-forums"):
Rendered C:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.0.0.rc2/lib/action_dis
patch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.0m
s)
ImЯ не уверен, если это что-то еще говорит, но я подумал, что добавлю это в случае.
Новый: Я пока не смог решить эту проблему.Поскольку я до сих пор не чувствую, что полностью понимаю проблему, я решил перейти к учебному пособию по Ruby on Rails 3 онлайн и посмотреть, не смогу ли я разобраться во время работы над ним.Так как я все равно планировал сделать это в следующий раз (у меня есть планы объединить оба приложения позже), похоже, сейчас самое время.