如何在Ruby on Rails中创建多个索引页面

时间:2015-12-14 03:56:09

标签: ruby-on-rails indexing partials

我有两个不同的计划(计划ID为1,计划ID为2)。我根据用户登录的计划在主页上创建了部分内容。我想为每个要定向的计划创建两个不同的索引页面。

计划ID 1用户需要定向到计划ID为2的用户索引,而计划ID 2用户需要定向到计划ID为1的用户索引。这里是控制此功能的部分代码。如何在单击相对部分后创建将计划ID 1和计划ID 2用户发送到不同页面的索引功能?

信息页/ home.html.erb

 <div class="col-md-6">
        <% if current_user.plan.name == "mentor" %>
          <%= render partial: "pages/mentor" %>
        <% else %>
          <%= render partial: "pages/mentee" %>
        <% end %>
  </div>

信息页/ _mentee.html.erb

<div class="well">
    <h2 class="text-center">Mentor Community</h2>
    <h4 class='text-center'>Get the support you need.</h4>
    <br><%= link_to "Find a Mentor", "#", class: 'btn btn-default btn-lg btn-block' %>
</div>

信息页/ _mentor.html.erb

<div class="well">
    <h2 class="text-center">Mentee Com</h2>
    <h4 class='text-center'>Give the support that's needed.</h4>
    <br><%= link_to "Find a Mentee", "#", class: 'btn btn-default btn-lg btn-block' %>
</div>

2 个答案:

答案 0 :(得分:2)

这样做:

#config/routes.rb
root "pages#home"
resources :plans, only: :show #-> url.com/plans/1

#app/controllers/plans_controller.rb
class PlansController < ApplicationController
   def show
      @plan = Plan.find params[:id]
   end
end

#app/views/plans/show.html.erb
<% @plan.users.each do |user| %>
   <%= user.name %>
<% end %>
  单击相对部分

您可以使用以下内容将用户发送到特定计划页面:

#app/views/pages/home.html.erb
<% @plans.each do |plan| %>
   <%= link_to plan.id, plan %>
<% end %>

你需要考虑更多,但就目前而言,上述内容应该有助于你了解整体结构。

让我解释一下你需要如何调整自己的想法(这可能看起来很不合适,但是会对你有所帮助,我保证)...

enter image description here

以上是Rails 意味着的工作原理 - 它接受用户的请求,将其与控制器操作相匹配,然后用填充它>模型数据。

Rails工作的正确方法是使用名为object orientated programming的东西 - 每次启动操作/请求时,都必须调用&amp;操纵对象的数据。

虽然这可能看起来很复杂,但是越早了解它,您就能越快地制作更复杂的轨道应用程序。

-

您的问题意味着您没有考虑数据驱动的rails应用程序的全部潜力。

并不重要,但是如果你改变了方法以便摆脱pages而不是plansusers,那么你就可以拥有尽可能多的计划如你所要。

这是考虑编程的正确方法(制作系统,而不仅仅是快速修复),然后您可以根据需要使用它来扩展功能。

答案 1 :(得分:-1)

删除条件的好方法是使用计划名称来查找部分。它会是这样的

<div class="col-md-6">
  <%= render partial: "pages/#{current_user.plan.name}" %>
</div>

但您需要确保每个计划都有正确的部分文件。否则,您将收到渲染错误,因为找不到部分错误。