如何通过id选择并在视图中显示?

时间:2017-03-09 08:08:27

标签: ruby-on-rails

我在数据库中有一个品牌表。我想要做的是按ID选择几行并在视图中显示它们。

这就是我所拥有的,但我无法让 Brand.find_by(id:[1,2,3])工作。

感谢任何帮助,谢谢!

在brand.rb模型中:

class Brand < ActiveRecord::Base

def selection
    Brand.find_by(id: [1,2,3])
end

在brands / index.html.erb视图中

<% @brand.selection.each do |brand| %>
<%= link_to brand.name, brand %>
<% end %>
控制器中的

class BrandsController < ApplicationController
def index
    @brands = Brand.all
end

def show
  @brand = Brand.find(params[:id])
  @review = Review.find(params[:id])
end

def new
  @brand = Brand.new
end

def create
  @brand = Brand.new(review_params)
end

end

1 个答案:

答案 0 :(得分:0)

您可以尝试使用.find方法并将其传递给数组:

array_of_ids = [1,2,3]
Brand.find(array_of_ids)

然后你可以转储@ brand.selection的结果,这样我们就可以看到你要回来的了。

我也可以问一下,我不知道你为什么这样做的具体细节但是,让你的选择方法接受数组作为参数并将其传递给find方法而不是更有意义硬编码。

def selection(array_of_ids)
    Brand.find(array_of_ids)
end

另外,在尝试从视图中保留尽可能多的逻辑方面,也许您应该在控制器中设置一个调用.selection的变量,然后将其传递给您的视图。

def index
    @brands = Brand.all
    @selected_brands = Brand.selection
end

此外,除非Brand.selection是你要在其他地方重复使用的东西(如果你是,那很好),你可能只是在声明变量时直接将它贴在控制器中:

def index
    @brands = Brand.all
    array_of_ids = [1,2,3]
    @selected_brands = Brand.find(array_of_ids)
end

在您的观看中,只需使用:

@selected_brands.each do |brand|
  //something
end