Как я могу использовать acts_as_commentable для двух моделей - PullRequest
0 голосов
/ 23 января 2012

Я хочу использовать act_as_commentable для двух моделей (блог и пост). Я сгенерировал модель комментария и добавил все мои поля.

Я создал comments_controller, и в действии создания мне нужно найти блоги и сообщения, поэтому, чтобы это работало, я делаю что-то вроде этого: -

def create
    if controller_name == "blogs" 
    @blog = Blog.find(params[:comment][:blog_id])
    @blog_comment = @blog.comments.new(:comment => params[:comment][:comment], :user_id => current_user.id)
    if @blog_comment.save
        flash[:success] = "Thanks for commenting"
        redirect_to :back or root_path
    else
        flash[:error] = "Comment can't be blank!"
        redirect_to :back or root_path
    end
  end


    if controller_name == "topics" 
    @post = Post.find(params[:comment][:post_id])
    @post_comment = @post.comments.new(:comment => params[:comment][:comment], :user_id => current_user.id)
    if @post_comment.save
      flash[:success] = "Thanks for commenting"
      redirect_to :back or root_path
    else
      flash[:error] = "Comment can't be blank!"
      redirect_to :back or root_path
    end
  end

Я знаю, что это довольно уродливо, но я не знаю, как с этим справиться, кто-нибудь может мне помочь?

1 Ответ

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

Я столкнулся с подобной проблемой в одном из моих приложений.

Вот что я сделал:

class CommentsController < ApplicationController
  before_filter :get_commentable

  def create
    @comment = @commentable.comments.build(params[:comment])
    if @comment.save
      ...
    else
      ...
    end
  end

  private
    def get_commentable
      params.each do |k, v|
        return @commentable = $1.classify.constantize.find(v) if k =~ /(.+)_id$/
      end
    end
end
...