добавил драгоценный камень и получил эту ошибку неопределенным методом `acts_as_votable 'для # - PullRequest
2 голосов
/ 25 апреля 2019

кодировщик Ruby здесь.

Я выполнил следующие действия: https://masteruby.github.io/weekly-rails/2014/08/05/how-to-add-voting-to-rails-app.html#.XMFebOhKg2w, чтобы загрузить этот камень act_as_votable, однако, когда я обновляю свой сайт, чтобы посмотреть, работает ли он, я получаю следующую ошибку: undefined method `acts_as_votable' for #<Class:0x00007f65df881b38> Код не похож на тот факт, что я добавил act_as_votable в мою модель, я хотел бы использовать его.

Ошибка в моей консоли также указывает, что что-то не так в моем контроллере. Мне тоже нужно что-то там определять?

Заранее спасибо,

Анжела

Модель Я хочу использовать драгоценный камень act_as_votable, вы можете видеть, что я добавил его в соответствии с инструкциями:

class Hairstyle < ApplicationRecord
     belongs_to :user, optional: true
     has_many :comments, dependent: :destroy
     validates :name, presence: true
     validates :description, presence: true
     validates :category, presence: true
     acts_as_votable 
     mount_uploader :photo, PhotoUploader
   end

Мой контроллер причесок с методом upvote в конце:

class HairstylesController < ApplicationController
  def index
    if params[:category].present?    
      @hairstyles = Hairstyle.where(category: params[:category])
    elsif params[:search].present?
      @hairstyles = Hairstyle.where('name ILIKE ?', '%#{params[:search]}%')
    else
      @hairstyles = Hairstyle.all
    end
  end

  def show
    @hairstyle = Hairstyle.find(params[:id])
    @comment = Comment.new  
  end

  def new
    @hairstyle = Hairstyle.new
  end

  def create
    @hairstyle = Hairstyle.create(hairstyle_params)   
    @hairstyle.user = current_user
    if @hairstyle.save!
      redirect_to hairstyle_path(@hairstyle)
    else
      render 'new'
    end
  end

  def edit
    @hairstyle = Hairstyle.find(params[:id])
  end

  def update
    @hairstyle = Hairstyle.find(params[:id])
    @hairstyle.update(hairstyle_params)
    redirect_to hairstyles_path
  end

  def destroy
    @hairstyle = Hairstyle.find(params[:id])
    @hairstyle.destroy
    redirect_to hairstyles_path
  end

  def upvote
    @hairstyle = Hairstyle.find(params[:id])
    @hairstyle.upvote_by current_user
    redirect_to hairstyles_path
  end

  private

  def hairstyle_params
    params.require(:hairstyle).permit(:name, :description, :category, :location, :stylist, :photo, :video_url, :photo_cache)
  end
end

Мой индексный файл, на котором я бы хотел отобразить камень:

  <% @hairstyles.each do |hairstyle| %>
    <%= link_to "upvote", like_hairstyle_path(hairstyle), method: :put%>
  <%end %>
</div>

Вот мой репо, если нужно: https://github.com/Angela-Inniss/hair-do

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Похоже, вы не выполнили все 4 шага настройки:

добавить 'acts_as_votable' в gemfile

Затем запустить с терминала:

bundle install

rails generate acts_as_votable:migration

rake db:migrate
0 голосов
/ 26 апреля 2019

Я клонировал и настроил ваше репо, и я увидел несколько вещей, которые могут быть причиной:

  • Первоначальная ошибка, которую я получил в этом клоне, произошла из-за act_as_taggable на ваших моделях.Ваши модели должны быть помечены как acts_as_taggable (множественное число)
  • Когда я проводил первоначальное тестирование, я не вошел в систему. Это молча завершается ошибкой, из-за чего кажется, что upvote не работает.Вы можете отключить эти сердца, если пользователь не вошел в систему
  • В вашем html / erb шаблоне есть закомментированный код и тому подобное.Это может привести к тому, что ссылка / URL будет проглочена и станет недоступной для клика.Я решил это, удалив все стили и форматирование, кроме ссылки, которую я тестировал.Мне нравится использовать Haml , чтобы уменьшить количество подобных ошибок вложенности
  • Я не столкнулся с ошибкой вашего класса, но я бы предложил запустить spring stop и попытаться запустить ваш сервер снова (Я отключаю пружину на всех моих проектах рельсов)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...