Rails 6 Показать или скрыть div, если значение cook ie соответствует токену в базе данных - PullRequest
0 голосов
/ 03 мая 2020

Я создаю приложение на rails 6, и у меня есть требование показать баннер с надписью "cook ie accept".

Я создал указанный баннер, и когда они нажимают кнопку подтверждения, повар ie создается с «токеном принятия», сохраняется в базе данных и отображается в поваре ie.

То, чего я пытаюсь добиться, - это скрыть этот баннер, если присутствует повар ie, и запись сопряжения токена повара ie в базе данных.

Я застрял на том, как вызвать повара ie и сопоставить значение с базой данных. Любая помощь здесь была бы отличной .. печенье совершенно новый для моего мира!

мой повар ie метод создания: - РАБОТАЕТ

  def create
    @cookie_acceptance = CookieAcceptance.new(cookie_acceptance_params)
    params[:ip_address] = request.remote_ip

    return unless @cookie_acceptance.save

    cookies[:roadze_cookie_acceptance] = {
      value: @cookie_acceptance.accept_token,
      expires: 1.year.from_now
    }
  end

Мой баннер:

<div class="fixed bottom-0 inset-x-0 pb-2 sm:pb-5" id="cookieBanner">
  <div class="max-w-screen-xl mx-auto px-2 sm:px-6 lg:px-8">
    <div class="p-2 rounded-lg bg-blue-600 shadow-lg sm:p-3">
      <div class="flex items-center justify-between flex-wrap">
        <div class="w-0 flex-1 flex items-center">
          <span class="flex p-2 rounded-lg bg-blue-800">
            <div class="flex items-center justify-center h-6 w-6 text-white">
              <i class="far fa-question fa-1x"></i>
            </div>
          </span>
          <p class="ml-3 font-medium text-white truncate">
            <span class="md:hidden">
              This site uses cookies to help your experience.
            </span>
            <span class="hidden md:inline">
              Attention: <span class="logo-font font-bold">roadze<span class="text-xs">.io</span></span> uses cookies to help your overall user experience, and to allow us to offer products specific to your region. <%= link_to "View cookie policy", '#', class: "text-white ml-3 hover:underline" %>
            </span>
          </p>
        </div>
        <div class="order-3 mt-2 flex-shrink-0 w-full sm:order-2 sm:mt-0 sm:w-auto">
          <div class="rounded-md shadow-sm">
            <%= form_for(@cookie_acceptance, remote: true) do |ca| %>
              <%= ca.hidden_field :ip_address, value: params[:ip_address] %>
              <%= ca.submit 'Accept', class: 'flex items-center justify-center px-4 py-2 border border-transparent text-sm leading-5 font-medium rounded-md text-blue-600 bg-white hover:text-blue-500 focus:outline-none focus:shadow-outline transition ease-in-out duration-150' %>
            <% end %>
          </div>
        </div>
        <div class="order-2 flex-shrink-0 sm:order-3 sm:ml-2">
          <button type="button" class="-mr-1 flex p-2 rounded-md hover:bg-blue-500 focus:outline-none focus:bg-blue-500 transition ease-in-out duration-150" aria-label="Dismiss">
            <svg class="h-6 w-6 text-white" stroke="currentColor" fill="none" viewBox="0 0 24 24">
              <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
            </svg>
          </button>
        </div>
      </div>
    </div>
  </div>
</div>

Ответы [ 2 ]

1 голос
/ 03 мая 2020

Вы должны прекратить рендеринг самой части, как показано ниже (условие уведомления в конце)

<div>
  ...
  <%= render 'global/marketing/cookie_banner', cookie_acceptance: at_symbol cookie_acceptance if cookie_accepted? %>
  ...
</div>

, и у вас должен быть вспомогательный метод в ApplicationHelper или соответствующий помощник

def cookie_accepted?
  CookieAcceptance.exists?(accept_token: cookies[:roadze_cookie_acceptance])
end

если эта проверка также требуется в контроллерах, вы можете переместить указанный выше метод из вспомогательного в ApplicationController и отметить этот метод как helper_method . Таким образом, вы сможете использовать cookie_accepted? для разных видов и контроллеров.

0 голосов
/ 03 мая 2020

Так что это может быть немного "взломать ie", однако я достиг своей цели, установив следующее в моих application_controller

  before_action :validate_cookie_presnece

  def validate_cookie_presnece
    return unless cookies.present?

    @cookie = CookieAcceptance.find_by(accept_token: cookies[:roadze_cookie_acceptance]).present?
  end

, кажется, все работает хорошо!

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