Справка: Добавление рейтинга к существующей модели постов в Rails - PullRequest
2 голосов
/ 23 января 2010

У меня есть простая модель сообщений с заголовком: строка и рейтинг: целое число, и я хочу добавить возможность оценки сообщений. Пока у меня есть

#Post controller   
def increase
 @post = Post.find(params[:id])
 @post.increment! :rating
 flash[:notice] = "Thanks for your rating."
 redirect_to @post
end

#Post show
<%= link_to "Rating", increase_post_path %>

#Routes
map.resources :posts, :member => { :increase => :put }

Когда я нажимаю на рейтинг, я получаю неизвестное действие. Я могу повысить рейтинг, когда добавлю @ post.increment! : рейтинг обновлять, но не когда я создаю свой собственный метод. Есть предложения?

Ответы [ 3 ]

4 голосов
/ 23 января 2010

Если у вас есть стандартные маршруты, говорящие

map.resources :posts

Вы должны заменить его на:

map.resources :posts, :member => { :increase => :put }

И это создаст маршрут «increment_post_path» с методом «put» для вашего приложения.

1 голос
/ 23 января 2010

Вот мое решение, если кому-то интересно. Спасибо за вашу помощь, ребята.

#Views
<%= link_to post.rating, increase_post_path(post) %>

#Controller
def increase
  @post = Post.find(params[:id]).increment!(:rating)
  flash[:notice] = "Thanks for rating"
  redirect_to posts_url
end

#Routes
map.resources :posts, :member => { :increase => :put }

Это работает, если вы хотите что-то только для себя, то, что не будет злоупотреблять. Очевидно, что добавление рейтинга на ваши сайты, где другие могут голосовать неограниченное количество раз, просто напрашивается на неприятности.

Я предлагаю использовать Votefu , делает рейтинги и даже имеет пользовательскую карму. Автор был достаточно хорош, чтобы сделать пример приложения .

1 голос
/ 23 января 2010

Вам необходимо добавить действие в файл routes.rb. Подробнее см. в этом превосходном руководстве .

...