Я пытаюсь разрешить treatment
голосовать за или против, но методы, предоставляемые act_as_votable, похоже, не работают должным образом. Когда я пытаюсь отобразить сумму голосов за и против, он каждый раз возвращает 0, что означает, что голоса не регистрируются должным образом.
My treatments_controller.rb
def upvote
@treatment = Treatment.find(params[:id])
@treatment.upvote_by @current_user
render 'show'
end
def downvote
@treatment = Treatment.find(params[:id])
@treatment.downvote_by @current_user
redirect_to treatments_path
end
My treatment.rb
class Treatment < ActiveRecord::Base
acts_as_votable
has_many :review
has_one :service
def score
self.get_upvotes.size - self.get_downvotes.size
end
end
My routes.rb
resources :treatments do
member do
put "like", to: "treatments#upvote"
put "dislike", to: "treatments#downvote"
end
end
И мой treatments/show.html.erb
<div class="container">
<div class="row">
<div class="col-sx-12 col-sm-12 col-md-8">
<h3><%= @treatment.name %></h3></br></br>
<h3>
<%= link_to "upvote", like_treatment_path(@treatment), method: :put %></br>
<%= link_to "downvote", dislike_treatment_path(@treatment), method: :put %></br>
<%= @treatment.score %></br> </h3>
В логе сервера написано следующее
Started PUT "/treatments/1/like" for ::1 at 2015-12-09 16:22:14 +0000
Processing by TreatmentsController#upvote as HTML
Parameters: {"authenticity_token"=>"hQnqV+OZ6m/9kFnr5YH6j563DIjyKfA4K/8fH6kpFbXbJRbsHCcNYn1AX4usZmUNXPlnFpxHMwTM8ilFxcbdhQ==", "id"=>"1"}
Geokit is using the domain: localhost
Treatment Load (0.5ms) SELECT "treatments".* FROM "treatments" WHERE "treatments"."id" = ? LIMIT 1 [["id", 1]]
(0.5ms) SELECT COUNT(*) FROM "votes" WHERE "votes"."votable_id" = ? AND "votes"."votable_type" = ? AND "votes"."vote_flag" = ? AND "votes"."vote_scope" IS NULL [["votable_id", 1], ["votable_type", "Treatment"], ["vote_flag", "t"]]
(0.0ms) SELECT COUNT(*) FROM "votes" WHERE "votes"."votable_id" = ? AND "votes"."votable_type" = ? AND "votes"."vote_flag" = ? AND "votes"."vote_scope" IS NULL [["votable_id", 1], ["votable_type", "Treatment"], ["vote_flag", "f"]]
Rendered treatments/show.html.erb within layouts/application (6.5ms)
User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 4]]
Completed 200 OK in 569ms (Views: 563.3ms | ActiveRecord: 1.0ms)
INSERT
для нового голосования.@current_user.nil?
Должно ли бытьcurrent_user
? - person Kristján   schedule 09.12.2015current_user
. Но теперь я получаю сообщение об ошибкеundefined local variable or method
current_user', хотя оно определено вApplicationHelper
в другом методеdef signed_in?
- person Fergus Morton   schedule 09.12.2015include
d их и называете вещи одинаково не делает их одинаковыми. Вы, вероятно, захотите написать методcurrent_user
вApplicationController
или запуститьbefore_action
, который устанавливает@current_user
, который будет сохраняться в течение всего действия. - person Kristján   schedule 09.12.2015ApplicationHelper
видны вашим представлениям, если вы хотите использовать их в своих контроллерах, вам придется либоinclude ApplicationHelper
в вашемapplication_controller.rb
, либо определить свой метод напрямую в этом файле. - person Amr Noman   schedule 09.12.2015