如何仅显示用户自己通过Devise in Rails撰写的文章

时间:2018-08-24 13:49:24

标签: ruby-on-rails

我正在使用full_calendar来根据用户ID显示事件。

我有一个home索引,用于呈现_form.html.erb事件,并在此处创建事件。

当我将日历移至事件/索引时,我尝试仅显示基于user_id的事件。

但是,当前有用户ID(1〜3),但是仅显示用户ID(1)的事件。其余用户ID创建的事件存储在数据库中,但在日历中不可见。

我只想根据日历中的用户ID显示事件。

家庭控制器

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 :(得分:2)

您的事件模型中可能包含以下行:

class Event < ApplicationRecord
  belongs_to :user

以及用户模型中的反映:

class User < ApplicationRecord
  has_many :events

有了这些关系,您只需在控制器中执行以下操作即可:

@events = current_user.events

因为current_user返回一个User实例,并且当您在User模型中定义has_many :events时,Rails在User上创建了这个events实例方法。

答案 1 :(得分:0)

我不完全理解您的问题,但是如果您只想显示某个特定用户的帖子,最简单的方法是在模型中使用范围,并从控制器中调用它:

模型范围

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

并在您的控制器中使用它:

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

这只会获取用户= current_user的结果