Как вызвать разные области с помощью кнопок link_to, используя ajax? - PullRequest
0 голосов
/ 02 марта 2020

Я работаю над проектом, в котором пользователи могут создавать события и подписываться на события других пользователей. Профиль показывает личную информацию слева и поток событий справа. Под профилем я хотел бы добавить ссылки, которые сортируют события по-разному (будущее, прошлое, пользователь, созданный и т. Д.) 1003 *

Я бы хотел сделать это, используя ajax звонки. У меня уже есть большинство областей, встроенных в модель событий, которую я хочу. Мне просто нужен способ изящно обновить фид. Извините, если я не очень хорошо это описываю. Я очень новичок на рельсах.

Вот соответствующий код. Модель события:

class Event < ApplicationRecord
  # == Constants ============================================================

  # == Attributes ===========================================================

  # == Extensions ===========================================================

  # == Relationships ========================================================
  belongs_to :creator, class_name: 'User'
  has_many :invitations, foreign_key: :attended_event_id
  has_many :attendees, through: :invitations, source: :attendee
  # == Validations ==========================================================

  # == Scopes ===============================================================
  scope :upcoming, -> { where("start_time >= ?", Time.now) }
  scope :past, -> { where("start_time < ?", Time.now) }
  scope :soonest_first, -> { order(:start_time) }
  scope :most_recent_first, -> { order(start_time: :desc) }
  # == Callbacks ============================================================

  # == Class Methods ========================================================

  # == Instance Methods =====================================================

end

Контроллер пользователя:

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.create(user_params)
    if @user
      redirect_to @user
    else
      render 'new'
    end
  end

  def show
    @user = User.find(params[:id])
    #@events = @user.attended_events.paginate(page: params[:page], per_page: 10)
    @upcoming_events = @user.events.upcoming.soonest_first
    @past_events = @user.events.past.most_recent_first
  end

  private

    def user_params
      params.require(:user).permit(:first_name, :last_name, :username, 
                                   :email, :password, :password_confirmation)
    end
end

Соответствующая часть обзора:

 <div class="row">

      <div class="col-lg-4">
        <div class="sidebar">

          <h3 class="sidebar-title"><%= @user.username%></h3>

          <div class="sidebar-item categories">
          <h4 class="sidebar-title">Events</h4>
          <ul>
            WHERE I WANT LINKS!!!
          </ul>

          </div><!-- End sidebar categories-->

        </div><!-- End sidebar -->

1 Ответ

1 голос
/ 03 марта 2020

Вы хотите через ajax, так что, я думаю, вы будете использовать файл js.erb, чтобы просто обновить часть, показывающую события, верно?

Есть один способ, который я могу придумать, это добавить index.js.erb файл в вашем каталоге событий, и сделайте что-то вроде <%= link_to 'future', events_path(filter: 'future'), remote: true %>, а в контроллере событий вы можете использовать параметр filter для фильтрации событий. Чтобы позволить рельсам отличаться от вызовов Ajax на обычный запрос, вы должны поместить лог c в format.js {}

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