вопрос маршрутизации рельсы 3.1 thums_up и forem - PullRequest
1 голос
/ 10 января 2012

Я пытаюсь интегрировать forem с thumbs_up. Я унаследовал модель Forem Post и контроллер.

Вот мой контроллер: -

  class PostsController < Forem::PostsController
    def vote_up
    begin
      current_user.vote_for(@post = Post.find(params[:id]))
      render :nothing => true, :status => 200
    rescue ActiveRecord::RecordInvalid
      render :nothing => true, :status => 404
    end
  end
end

Вот как выглядит Post Controller of Forem: -

module Forem
  class PostsController < Forem::ApplicationController
    before_filter :authenticate_forem_user
    before_filter :find_topic
    .
    .
    .
    .
private

    def find_topic
      @topic = Forem::Topic.find(params[:topic_id])
    end
  end
end

Вот мои маршруты: -

 mount Forem::Engine, :at => "/forums"

resources :posts do
  member do
    post :vote_up
  end
end

Вот мой взгляд: -

<%= link_to t('vote for this post!', :scope =>"forem.post"), main_app.vote_up_post_path(@post), :method => :post %>

Это ошибка, которую я получаю: -

ActiveRecord :: RecordNotНайдено в PostsController # voice_up

Не удалось найти Forem :: Тема без идентификатора

В чем может быть проблема?

Ответы [ 2 ]

1 голос
/ 10 января 2012

Ваша проблема в фильтре before:

module Forem
  class PostsController < Forem::ApplicationController
    #...
    before_filter :find_topic
    #...
    def find_topic
      @topic = Forem::Topic.find(params[:topic_id])
    end

, а затем:

class PostsController < Forem::PostsController
  def vote_up
    #...

Так что find_topic будет вызываться раньше vote_up, но маршрут для vote_up выиграл:topic_id;no :topic_id означает, что find_topic будет делать это:

@topic = Forem::Topic.find(nil)

, и вот откуда ваша ошибка.

На ум приходят три варианта:

  1. Переместите vote_up в отдельный класс контроллеров, который не наследуется от Forem::ApplicationController.
  2. Добавьте skip_filter :find_topic, :only => :vote_up в PostsController.
  3. Настройте маршрути ссылку, чтобы получить :topic_id в маршруте.

Если для голосования не требуется @topic, тогда (1) или (2) будет работать, в противном случае вам придется идти с(3). * 1 035 *

0 голосов
/ 10 января 2012

отметьте rake routes в командной строке, и проверьте, что id должен быть таким:

и используйте debugger в контроллере! и напишите params там, возможно, вы получите решение.

...