Теги из `actions-as-taggable` не отображаются - PullRequest
0 голосов
/ 19 января 2019

Я собираюсь расширить свое приложение toDoList Rails 5 на основе учебника Hartl, внедрив систему тегирования с использованием gem 'acts-as-taggable-on', '~> 5.0'. Перед добавлением тегов приложение в настоящее время поддерживает множество учетных записей пользователей, а также функцию регистрации и входа в систему. Я слежу за этим видео , чтобы помочь мне его реализовать.

Я обновил модель Micropost, общую форму Micropost и основную форму Micropost, которая отвечает за отображение тегов на домашней странице пользователей.

Однако даже после создания тегов без ошибок. Теги не отображаются. Может кто-нибудь подсказать, откуда может возникнуть ошибка? Дайте мне знать, если вам нужна дополнительная информация о моем заявлении.

Вот мой код для файлов, которые я изменил.

Микропост Модель

class Micropost < ApplicationRecord
  belongs_to :user
  attr_accessor :tag_list 
  acts_as_taggable 
  default_scope -> { order(created_at: :desc) }
  validates :user_id, presence: true
  validates :content, presence: true, length: {maximum: 140 }

end

shared / _micropost_form.html.erb (для добавления задач)

<%= form_for(@micropost) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.label :tag_list, "Tags (separated by commas)" %><br />
    <%= f.text_field :tag_list %> 
  </div>
  <div class="field">
    <%= f.label :content %><br />
    <%= f.text_area :content, placeholder: "Add new task..." %>
  </div>
  <%= f.submit "Add Task", class: "btn btn-primary" %>
<% end %>

Основная форма Micropost (_micropost.html.erb, чтобы увидеть текущие задачи)

<li id="micropost-<%= micropost.id %>">
  <%= link_to gravatar_for(micropost.user, size: 50), micropost.user %>
  <span class="user"><%= link_to micropost.user.name, micropost.user %></span>
  <span class="content"><%= micropost.content %></span>
  <p>
    Tags: <%= micropost.tag_list %>
  </p>
  <span class="timestamp">
    Posted <%= time_ago_in_words(micropost.created_at) %> ago.
    <% if current_user?(micropost.user) %>
      <%= link_to "Done", micropost, method: :delete,
                                   data: { confirm: "Keep up the good work!" } %>
    <% end %>
  </span>
</li>

Микропост контроллер

class MicropostsController < ApplicationController
  before_action :logged_in_user, only: [:create, :destroy]
  before_action :correct_user,   only: :destroy

  def create
    @micropost = current_user.microposts.build(micropost_params)
    if @micropost.save
      flash[:success] = "Micropost created!"
      redirect_to root_url
    else
      @feed_items = []
      render 'static_pages/home'
    end
  end

  def destroy
    @micropost.destroy
    flash[:success] = "You have deleted a task!"
    redirect_to request.referrer || root_url
  end

  private

    def micropost_params
      params.require(:micropost).permit(:content, :tag_list)
    end

    def correct_user
      @micropost = current_user.microposts.find_by(id: params[:id])
      redirect_to root_url if @micropost.nil?
    end
end

В примере аккаунта (некоторые посты имеют одинаковое содержание, но разные теги, ошибка еще не учтена)

Sample Account

Обновление: я изменил свой код в соответствии с комментарием и получил новое сообщение об ошибке. Ошибка строки относится к методу save.

Error Message

...