act_as_votable с использованием IP-адреса

Я хочу, чтобы пользователи могли голосовать за сообщения без регистрации, а голосование вместо этого было привязано к их IP-адресу. Я попытался выполнить этот пост, но Мне нужно еще несколько разъяснений. это ошибка, которую я получаю от posts_controller

неопределенный метод `find_or_create_by_ip' для #

Это мой код до сих пор:

сообщения_контроллер:

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

маршруты.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

В другом сообщении кто-то сказал добавьте столбец ip в таблицу сеансов. Что именно это значит? Я также где-то видел, что мне также нужно будет создать таблицу БД. я? и как бы я это сделал? Извините, что пришлось опубликовать это, я довольно новичок в этом, поэтому было бы здорово, если бы это было изложено лучше для меня. Спасибо!


person DavidK    schedule 20.06.2015    source источник


Ответы (1)


Если вы используете динамические средства поиска Rails 4+, они устарели и извлечены в gem. Теперь стандартом является find_or_create_by или find_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
person Antarr Byrd    schedule 20.06.2015
comment
спасибо, я изменил это. Я все еще получаю сообщение об ошибке. неопределенный метод `find_or_create_by' для #‹ActionDispatch::Request::Session:0x7f73910› - person DavidK; 21.06.2015
comment
Хорошо, я изменил это, но теперь у меня новая ошибка при создании таблицы. неопределенная локальная переменная или метод «запрос» для сеанса (таблица не существует): класс, как мне это создать? - person DavidK; 21.06.2015
comment
Что вы используете для аутентификации? У вас есть миграция, которая создает таблицу сеансов? - person Antarr Byrd; 21.06.2015
comment
спасибо за всю помощь, но я совершенно потерян, и я не хочу больше тратить ваше время. - person DavidK; 21.06.2015
comment
Вероятно, вам следует использовать Devise или Хранилище сеансов Active Record и добавить IP-адрес в таблицу сеансов. - person Antarr Byrd; 21.06.2015