Как показывать только статьи, написанные самими пользователями через Devise в Rails - PullRequest
0 голосов
/ 24 августа 2018

Я использую full_calendar для отображения событий на основе идентификатора пользователя.

У меня есть индекс home, который отображает _form.html.erb событий и создает события здесь.

И когда я перешел к событиям / индексу с календарем, я попытался показать только события на основе идентификатора пользователя.

Однако в настоящее время существует идентификатор пользователя (1 ~ 3), но отображаются только события для идентификатора пользователя (1). События, созданные остальным идентификатором пользователя, хранятся в БД, но не отображаются в календаре.

Я хочу отображать в календаре только события в соответствии с идентификатором пользователя.

Домашний контроллер

def index
  @event = Event.new
  @events = Event.order("RANDOM()").first(1)
end

index.html.erb (Домашний контроллер)

<%= render partial: 'events/form', locals: { event: @event } %>

_form.html.erb (контроллер событий)

<%= simple_form_for(@event) do |f| %>
  <%= f.error_notification %>
  <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>

  <div class="form-inputs">
    <%= f.input :title %>
    <%= f.input :description %>
    <%= f.input :color %>
    <%= f.input :start_time %>
    <%= f.input :end_time %>
    <%= f.hidden_field :user_id, :value => @event.user_id %>      
    <%= f.hidden_field :user_email, :value => @event.user_email %>      


  </div>
  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

index.html.erb (Контроллер событий)

<div class="row">
    <div class="col-lg-12">
        <section class="panel">
            <div class="panel-body">
                <div id="calendar"></div>
            </div>
        </section>
    </div>
</div>

<% @events.each do |x| %>
    <% if(x.user_id == current_user.id) %>
        <script type='text/javascript' src='jquery-1.8.1.min.js'></script>
        <script>
        $('#calendar').fullCalendar({
           header: {
                         left: 'prev,next today',
                         center: 'title',
                         right: 'month,agendaWeek,agendaDay'
                     },
                    events: '/events.json'
                });
        </script>
    <% else %>
        <script type='text/javascript' src='jquery-1.8.1.min.js'></script>
        <script>
        $('#calendar').fullCalendar({
           header: {
                         left: 'prev,next today',
                         center: 'title',
                         right: 'month,agendaWeek,agendaDay'
                     },
                });
        </script>
    <% end %>
<% end %>

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Возможно, в вашей модели событий есть следующая строка:

class Event < ApplicationRecord
  belongs_to :user

И отражение в модели пользователя:

class User < ApplicationRecord
  has_many :events

С этими отношениями вы можете просто сделать следующеев вашем контроллере:

@events = current_user.events

Поскольку current_user возвращает экземпляр User, а когда вы определили has_many :events в модели User, Rails создал этот метод экземпляра events для User.

0 голосов
/ 24 августа 2018

Я не до конца понимаю ваш вопрос, но если вы хотите показывать сообщения только определенного пользователя, самый простой способ - использовать область в модели и вызвать ее из контроллера:

Объем модели

  class Calendar
    scope :by_user, -> (user) { where(user:user) }
  end

И используйте его в вашем контроллере:

 def index
   @calendars = Calendar.by_user(current_user)
 end

Это будет только выборка результата, для которого user = current_user

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...