2015-06-20 70 views
1

我想允许用户在没有注册的情况下对帖子进行投票,并且将投票连接到他们的IP地址。我试过this post,但我需要更多的澄清。这是错误的IM从posts_controller越来越acts_as_votable使用IP地址

未定义的方法`find_or_create_by_ip”为#

这是到目前为止我的代码:

posts_controller:

def upvote 
    @post = Post.find (params[:id]) 
    session[:voting_id] = request.remote_ip 
    upvote = session.find_or_create_by_ip(session[:voting_id]) 
    @post.upvote 
    redirect_to :back 
    end 

    def downvote 
    @post = Post.find (params[:id]) 
    session[:voting_id] = request.remote_ip 
    downvote = session.find_or_create_by_ip(session[:voting_id]) 
    @post.downvote 
    redirect_to :back 
    end 

会话模型:

class session < ActiveRecord::Base 
    acts_as_voter 
    request.remote_ip 
end 

的routes.rb:

Rails.application.routes.draw do 
    get 'static_pages/home' 
    get 'static_pages/about' 
    resources :posts do 
    member do 
     put "like" , to: "posts#upvote" 
     put "dislike" , to: "posts#downvote" 
    end 
    end 

other post有人说加一个IP列到会话表。这到底是什么意思呢?我也看到了我需要创建一个数据库表的地方。我呢?我该怎么做?对不起,我不得不发布这个,让我对这个很新,所以如果它对我更好的说明会很棒。谢谢!

回答

0

如果您正在使用Rails 4+动态查找器已被deprecated并提取到gem。标准现在是find_or_create_byfind_or_initialize_by

def upvote 
    @post = Post.find (params[:id]) 
    session[:voting_id] = request.remote_ip 
    upvote = Session.find_or_create_by(ip: session[:voting_id]) 
    @post.upvote 
    redirect_to :back 
end 

def downvote 
    @post = Post.find (params[:id]) 
    session[:voting_id] = request.remote_ip 
    downvote = Session.find_or_create_by(ip: session[:voting_id]) 
    @post.downvote 
    redirect_to :back 
end 

class Session < ActiveRecord::Base 
    acts_as_voter 
    request.remote_ip 
end 
+0

谢谢,我改变了这一点。尽管如此,我仍在收到错误。 “未定义的方法find_or_create_by'为#” – DavidK

+0

好吧,我改变了这一点,但现在我有一个关于创建表的新错误。 “未定义的局部变量或方法'请求'会话(表不存在):类”我将如何去创建? – DavidK

+0

你使用什么进行验证?您是否有创建会话表的迁移? –