Routes Rails5路由和条件语句

Routes Rails5路由和条件语句,routes,conditional,ruby-on-rails-5,Routes,Conditional,Ruby On Rails 5,我想知道是否有人能帮上忙……这让我很沮丧 首先,我对这一切还很陌生。如果我弄错了一些术语,我向你道歉。我已经完成了一些教程,现在正在开发我的第一个应用程序,没有任何引导演练。。。进展缓慢:) 我有两组页面,一组显示侧边栏,另一组不需要侧边栏。下面是我的路线 Rails.application.routes.draw do #----Pages---- root 'pages#home' get '/home', to: 'pages#home' get '/contact', to: 'pag

我想知道是否有人能帮上忙……这让我很沮丧

首先,我对这一切还很陌生。如果我弄错了一些术语,我向你道歉。我已经完成了一些教程,现在正在开发我的第一个应用程序,没有任何引导演练。。。进展缓慢:)

我有两组页面,一组显示侧边栏,另一组不需要侧边栏。下面是我的路线

Rails.application.routes.draw do

#----Pages----
root 'pages#home'
get '/home', to: 'pages#home'
get '/contact', to: 'pages#contact'

#----Users----
get '/app', to: 'users#app'
get 'users/new', to: 'users#new'
get '/users', to: 'users#index'
get '/signup', to: 'users#new'
post '/signup', to: 'users#create'

#----Sessions----
get    '/login',   to: 'sessions#new'
post   '/login',   to: 'sessions#create'
delete '/logout',  to: 'sessions#destroy'


#----Projects----
get'/projects/:id', to: 'projects#show'
get '/projects', to: 'projects#index'
get '/projects/new', to: 'projects#new'
post '/projects/new', to: 'projects#create'


#----Hazards----
get'/hazards/:id', to: 'hazards#show'
get '/hazards', to: 'hazards#index'
get '/hazards/new', to: 'hazards#new'

#----Resources----
resources :users
resources :projects
resources :hazards
end
我有以下代码在我的头工作良好

<% if current_page?(app_path) ||
            current_page?(users_path) ||
            current_page?(projects_path) ||
            current_page?(hazards_path)
    <%= render 'layouts/sidebar' %>
<% end %> 
导致

<% if current_page?(app_path) ||
            current_page?(users_path) ||
            current_page?(projects_path) ||
            current_page?(hazards_path) ||
            current_page?(project_path(:id)) %>
    <%= render 'layouts/sidebar' %>

<% end %>
经过此修改后,项目页面现在正确显示侧栏,但。。。没有侧边栏的所有其他页面加载失败,出现以下错误

No route matches {:action=>"show", :controller=>"projects", :id=>nil}    missing required keys: [:id]
我不知所措。。。我也试过了

current_page?(project_path(params.permit))
Current_page?(project_path(project))
current_page?(project_path(project(params[:id])))
谁能帮我摆脱痛苦。。。这并不夸张。。。纯粹的痛苦

非常感谢。

这看起来也很难看:

<% if current_page?(app_path) ||
  current_page?(users_path) ||
  current_page?(projects_path) ||
  current_page?(hazards_path) ||
  current_page?(project_path(:id)) %>
<%= render 'layouts/sidebar' %>
项目控制器:

def show_sidebar
  @show_it = true
end
before_action :show_sidebar, only: [:show]  
鉴于:

<%= render 'layouts/sidebar' if @show_sidebar %>

(这应该行得通(不完全确定语法-newby:))。也可以尝试:

<% if @show_sidebar %>
  <%= render 'layouts/sidebar' %>
<% end %>

您也可以使用相同的逻辑,将“true”替换为“false”,并在before_action方法中告诉控制器在哪里不显示边栏

希望这有帮助


p、 下一次,如果你从Rails得到了错误的行为而没有出现错误,那么也可以显示/查看你自己的日志。

…如果我告诉你现在是凌晨03:51,我早上有工作,那该怎么办。。。。看,我完全投入了。。。在我绝望的时候,我在几个不同的论坛上发布了我的问题,我似乎已经添加了两次了。。。这里有人回答。。。顺便说一句,我整理了代码。。。但却有不同的做法。我在标题本身中添加了一个IF子句,只是添加了呈现形式helper@Sergio答案很有趣,他写的答案只是为了回答你们的问题,这个解决方案现在看起来更好了,但我仍然认为这个冗长的陈述是错误的。它肯定违反了MVC中的某些内容,特别是如果你在视图中这样做的话。所以我仍然认为我的方法更好,但是我觉得它可以从应用助手中做得更优雅。是的,我同意OR语句不是很好。目前,我只想让一切以我理解的方式运作。将有第二个版本,毫无疑问是第三个版本,我将重构所有代码,我也非常确定,到那时,我将使用ember.js重写js的大多数视图,所以现在我只是稍微慢了一点,谢谢你的帮助。
<%= render 'layouts/sidebar' if @show_sidebar %>
<% if @show_sidebar %>
  <%= render 'layouts/sidebar' %>
<% end %>