【问题标题】:Rails link_to the records of a instance variable .count() resultRails link_to 记录一个实例变量 .count() 结果
【发布时间】:2013-10-09 01:53:33
【问题描述】:

我的 提交者模型 中的记录显示在 应用程序索引视图 中,并显示在如下表中。只有我希望能够点击为.count() 列出的号码,然后转到我的Tickets Index 视图,并列出所有相应的记录(Tickets)。

我无法理解如何将实例变量链接到控制器的操作,以便使用我的视图布局。

有什么想法吗?

<table>
  <tr>
    <th>Name</th>
    <th>Number of Tickets</th>
  </th>
  <tr>
    <% Submitter.where(:school_id => current_user.school_id, :disabled => false).each do |sub| %>
    <td><%= link_to sub.full_name, edit_submitter_path(sub) %></td>
    <td><%= Ticket.where(:submitter_id => sub).count %></td>
  </tr>
    <% end %>
</table>

routes.rb

resources :feedbacks
resources :products

get "password_resets/new"
get 'signup', to: 'users#new', as: 'signup'
get 'login', to: 'sessions#new', as: 'login'
get 'logout', to: 'sessions#destroy', as: 'logout'

resources :users
resources :sessions
resources :password_resets
resources :mailing_lists
resources :submitters
resources :emails
resources :notes
resources :reminders
resources :descriptions
resources :issues
resources :locations
resources :schools
resources :tickets

root :to => "application#index"

【问题讨论】:

    标签: ruby-on-rails controller render link-to


    【解决方案1】:

    听起来您的提交者有很多票。如果是这样,您将显示提交者列表(在 submitters_controller#index 方法中)并计算票证的数量。然后将该号码链接到 ticket_controller#index 方法。像这样……

    routes.rb

    resources :submitters do
      resources :tickets
    end
    

    submitters_controller.rb

    class SubmittersController < ApplicationController
    
      def index
        @submitters = Submitter.where(:school_id => current_user.school_id, :disabled => false)
      end
    
    end
    

    tickets_controller.rb

    class TicketsController < ApplicationController
    
      def index
        @submitter = Submitter.find(params[:submitter_id])
        @tickets = @submitter.tickets
      end
    
    end
    

    视图/提交者/index.html.erb

    <table>
      <tr>
        <th>Name</th>
        <th>Number of Tickets</th>
      </th>
      <% @submitters.each do |sub| %>
        <tr>
          <td><%= link_to sub.full_name, edit_submitter_path(sub) %></td>
          <td><%= link_to pluralize(sub.tickets.count, 'ticket'), submitter_tickets_path(sub) %></td>
        </tr>
      <% end %>
    </table>
    

    views/tickets/index.html.erb

    # This would show a list of tickets and their attributes - possibly linking to a ticket.
    

    【讨论】:

    • 谢谢,但我会在我的应用程序索引中显示提交者列表和票号,然后将它们链接到票证索引。我觉得这改变了你所拥有的东西。
    • 这是一个微小的变化,但值得。如果您要显示提交者列表,则应该在 submitters_controller 中。这就是索引的作用。遵循这种模式很安静,值得。 Rails 鼓励你这样做,如果你遵循 Rails 约定,你会发现你的项目会发展得更顺利。您应该能够从应用程序控制器剪切和粘贴您的索引方法,然后链接到 /submitters url。
    • 感谢您的解释。我的推理更多是因为设计方面而不是功能方面。但是,为了测试,我像你一样设置它,它似乎可以工作并加载 /submitter/{submitter_id}/tickets URL,但只显示我的常规索引页面。我猜是因为我之前已经有一个@tickets。 @tickets = paginate.where(:school_id =&gt; @current_user.school_id).order(sort_column + " " + sort_direction).search(params[:search])我怎样才能让它使用不同的动作或实例变量?
    • 啊 - 是的,在这种情况下,如果您想对 /tickets 和 /submitter/:submitter_id/tickets 使用相同的操作,则必须查找 submitter_id 参数并有条件地实例化 @tickets。一个简单的 if param[:submitter_id] 就可以了。如果 submitter_id 在工单记录中,可以添加到 where 子句中。
    【解决方案2】:

    可能是这样的?不是 100% 理解您的问题。

    <table>
      <tr>
        <th>Name</th>
        <th>Number of Tickets</th>
      </th>
      <tr>
        <% Submitter.where(:school_id => current_user.school_id, :disabled => false).each do |sub| %>
          <td><%= link_to sub.full_name, edit_submitter_path(sub) %></td>
          <td><%= link_to pluralize(sub.tickets.count, 'ticket'), tickets_path %></td>
        <% end %>
      </tr>
    </table>
    

    当然,除非我知道您的config/routes.rb 是什么样子,否则我无法为您提供完美运行的代码,因为我不知道您的Tickets Index 视图 的方法是什么。

    【讨论】:

    • 对不起,如果我不清楚。不知道如何措辞。这是一个正确的方向。但是,当我单击这些时,它会加载 localhost:3000/tickets.*insert_random_number_here* 这显然只是一个空白页面。我的 config/routes.rb 是标准的。为了进一步解释,如果 count() 返回 4。我想点击数字 4 并显示这 4 条记录。
    • 我不知道你的意思是你的config/routes.rb 是标准的,因为我不知道它应该是什么。 ticket_path 是否需要传递给订阅者?
    • 您可以通过发布您的路线让我们俩的生活更轻松 :)
    • 我意识到 localhost:3000/tickets.*insert_random_number_here* 实际上是提交者 ID,而不是随机数。
    猜你喜欢
    • 2015-09-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2023-03-08
    相关资源
    最近更新 更多