在Rails中,如何使用视图中的参数过滤控制器



我有一个遍历一些公司的视图。对于每家公司,我都希望通过一些特定于每家公司的时间轴来循环。我如何将参数传递到时间轴控制器上的公司?还是说这不是正确的做法?

# controllers/companies_controller.rb
class CompaniesController < ApplicationController
  def index
    @companies = Company.sorted
    @timelines = Timeline.sorted
    ...
# models/company.rb
class Company < ActiveRecord::Base
  has_many :timelines, dependent: :destroy
  scope :sorted, lambda { order("companies.name ASC") }
  ...
# models/timeline.rb
class Timeline < ActiveRecord::Base
  belongs_to :company
  scope :sorted, lambda { order("timelines.created_at DESC")}
  ...
# views/companies/index.html.erb
<% @companies.each_with_index do |company, index| %>
  ...
  <% @timelines.each do |timeline| %>

最后一行是我遇到麻烦的地方。我可以让所有的时间轴帖子都以这种方式显示,但我想让它们在每个迭代中特定于公司。我在第一个循环中有company.id,但我不确定如何使用它,因为它在视图中。

注意:我有一个外键在timelines引用company_id。版本:ruby 2.2.3rails 4.2.4

你可以这样做

<% @companies.each_with_index do |company, index| %>
  ...
  <% company.timelines.each do |timeline| %>

更新:

除了pavan对排序特性的评论之外,您应该像这样将sorted范围添加到timelines

<% @companies.each_with_index do |company, index| %>
  ...
  <% company.timelines.sorted.each do |timeline| %>

可以像下面这样使用

<% @companies.each_with_index do |company, index| %>
  ...
  <% @timelines.where(comapany_id: company.id).each do |timeline| %>

假设第二个循环在第一个循环内

最新更新