Ruby / Rails - 设计 - before_action:authenticate_user!阻止else语句显示

时间:2016-09-30 19:25:12

标签: ruby-on-rails ruby if-statement devise conditional

我想利用我的"计划"完全单独的部分或新文件/位置。应该从着陆页上的按钮访问此页面或部分页面。 目前,我的"计划"如果用户未登录,则html设置为在我的主页上有条件地显示。由于" before_action:authenticate_user!"我在主页上,查看"否则" (包含计划)无法查看。我应该将计划分成单独的页面并删除条件声明吗?或者我应该将其分开并在我的else语句中呈现视图?

我是否需要提供其他信息?

我使用的是正确的术语吗?

home.html.erb

<div class="row">
 <% if user_signed_in? %>

    <%= render 'users/home' %>

 <% else %>

 <!--Plans-->
 <div class="row">
    <div class="col-lg-3">
        <div class="well text-center">

            <!--Plan #1-->
            <%= link_to "REGISTER", new_user_registration_path(plan: @contributor_plan.id), class:'btn btn-info btn-block' %>

            <!--Plan #2-->
            <%= link_to "REGISTER", new_user_registration_path(plan: @elitecontributor_plan.id), class:'btn btn-warning btn-block' %>

            <!--Plan #3-->
            <%= link_to "REGISTER", new_user_registration_path(plan: @technician_plan.id), class:'btn btn-info btn-block' %>

            <!--Plan #4-->
            <%= link_to "REGISTER", new_user_registration_path(plan: @elitetechnician_plan.id), class:'btn btn-info btn-block' %>

            </div>
        </div>
    </div>

 <% end %>

pages_controller.rb

class PagesController < ApplicationController
before_action :authenticate_user!, except:  [:landing, :plans]

def landing

end

def plans
end

def home
    @contributor_plan = Plan.find(1)
    @elitecontributor_plan = Plan.find(2)
    @technician_plan = Plan.find(3)
    @elitetechnician_plan = Plan.find(4)
    @center_plan = Plan.find(5)
    @elitecenter_plan = Plan.find(6)
    @affair_plan = Plan.find(7)
    @eliteaffair_plan = Plan.find(8)
end

1 个答案:

答案 0 :(得分:0)

您可以拥有2条单独的路由路由,一条用于经过身份验证的用户,另一条用于未经过身份验证的用户。我假设你正在使用Devise?

配置/路线:

authenticated do
  root :to => 'pages#home', as: :authenticated
end

root :to => 'pages#plans'

要回答你问题的第二部分,是的,你可以把计划分成它自己的资源,我建议你这样做。

那就是这样的:

配置/路线:

authenticated do
  root :to => 'home#dashboard', as: :authenticated
end

root :to => 'plans#index'