#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-5
#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-5
Вопрос:
Я пытаюсь скрыть эту кнопку со всех страниц показа Rooms
модели. У меня есть массив комнат id
, хранящихся в @extra
, но всякий раз, когда я пытаюсь использовать current_page?(room_path(@extra))
его, он не работает, но, например, когда я указываю идентификатор, current_page?(room_path(6))
он работает и скрывает кнопку. Что я делаю не так?
<% unless current_page?(controller: 'rooms') || current_page?(room_path(@extra))%>
<button onclick="myFunction()" class="button btn btn-light bg-white rounded-pill shadow-sm px-4 mb-4"
style="vertical-align:middle">
<span>
<small class="text-uppercase font-weight-bold"> Nav-bar Toggle</small>
</span>
</button>
<% end %>
маршруты / rb
require 'sidekiq/web'
Rails.application.routes.draw do
resources :messages
resources :rooms
# Routing for budget section
resources :budgets do
resources :groups do
resources :categories
end
end
resources :posts do
resources :likes
resources :comments
end
resources :socials
resources :mentions, only: [:index]
resources :mentioned_posts, only: [:index]
resources :follows
resources :followers, only: [:index]
resources :followings, only: [:index]
resources :accounts
resources :goals
resources :retirements
get '/users', to: 'users#index'
get '/user/:id', to: 'users#show', as: 'user'
resources :calculate_debts
get '/privacy', to: 'home#privacy'
get '/terms', to: 'home#terms'
authenticate :user, lambda { |u| u.admin? } do
mount Sidekiq::Web => '/sidekiq'
end
resources :notifications, only: [:index]
resources :announcements, only: [:index]
devise_for :users, controllers: { omniauth_callbacks: "users/omniauth_callbacks" }
root to: 'home#index'
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
Комментарии:
1. Я полагаю
room_path
, что ожидается целое число, а не массив. Почему вы передаете массив этому?2. При попытке запустить его обычным способом
<% unless current_page?(controller: 'rooms', action: 'show') %>
я получаю эту ошибкуNo route matches {:action=>"show", :controller=>"rooms"}
3. Я получаю эту ошибку только тогда, когда покидаю страницу
rooms
индекса или страницу показа, и именно поэтому я подумал о сохранении значений в массиве, поскольку другой метод не сработал4. Возможно ли предоставить общий доступ к вашему
routes.rb
файлу?5. Я только что добавил его
Ответ №1:
На основе информации, представленной в комментариях. show
Для завершения пути требуется идентификатор. Вы можете проверить это с помощью,
current_page?(controller: 'rooms', action: 'show', id: room_id)
вместо
current_page?(controller: 'rooms', action: 'show')
Если вы хотите проверить конкретный идентификатор комнаты, вы можете использовать
current_page?(controller: 'rooms', action: 'show', id: room_id)
Если вы хотите проверить только контроллер и действие, независимо от идентификатора комнаты, вам придется использовать другую стратегию. Вы можете использовать,
if params[:controller] == :rooms amp;amp; params[:action] == :show
или сопоставление с регулярным выражением
if request.fullpath =~ //rooms/d /
Комментарии:
1. Я получаю эту ошибку, когда пытаюсь запустить,
undefined local variable or method `room_id' for #<#<Class:0x00007f70418f3938>:0x00007f70418f1480> Did you mean? dom_id
чтоid: room_id
, как предполагается, делать?2.
room_id
это был просто пример, который я привел. Вам нужно заменить это на идентификатор комнаты, которую вы ищете.