如何显示数据库的特定项目

时间:2014-07-04 23:10:58

标签: ruby-on-rails ruby

我的rails应用程序有一个数据库集。

def index
    @clubs = Club.all
end

这是我的控制器。

如果我输入我的Index.html.erb

<% @clubs.each do |club| %>
<%= club.name %>
<% end %>

我在索引视图中显示了我的数据库的所有名称。

如果我只想选一个或只是一对,该怎么办? 通过rails控制台我可以输入c = Club.find(1)1默认情况下取id = 1。 那么我怎样才能在同一个index.html.erb中显示多个ID而不是全部数据库。

非常感谢!

4 个答案:

答案 0 :(得分:2)

试试这个:

让我们考虑params[:ids]包含属于您想要获取的记录的所有ID。

def index
    @clubs = Club.where(id: params[:ids])
end

答案 1 :(得分:1)

<强>修正

这里直截了当的答案是建议您查看控制器中可以调用的ActiveRecord methods;特别是.where

#app/controllers/clubs_controller.rb
Class ClubsController < ApplicationController
    def index
       @clubs = Club.where column: "value"
    end
end

这将填充@clubs实例变量,仅 匹配该特定条件的记录。请记住,它是您的 Rails应用程序,因此您可以使用它做您想做的事情。

当然,建议您坚持使用惯例,但没有什么能阻止您将特定数据填充到@clubs变量中

-

<强>的RESTful

正如有人提到的,您不应该在index操作中包含“已过滤”的记录。虽然我个人并不赞同这个想法,但事实仍然是Rails旨在支持convention over configuration - 这意味着您应该将index操作保留为显示all记录

可能希望创建一个collection特定的操作:

#config/routes.rb
resources :clubs do
   collection do
      get :best #-> domain.com/clubs/best
   end
end

#app/controllers/clubs_controller.rb
Class ClubsController < ApplicationController
    def best
       @clubs = Club.where attribute: "value"
       render "index"
    end
end

答案 2 :(得分:0)

更改

def index
    @clubs = Club.all
end

到这个

def index
    @clubs = Club.find(insert_a_number_that_is_the_id_of_the_club_you_want)
end

查询数据库是一件复杂的事情,它为您提供了大量选项,以便您可以完全获得所需内容并将其放入@clubs变量中。我建议阅读this part of the rails guide

还应该注意的是,如果您只是要在数据库中查询一条记录,那么请将@clubs更改为@club,这样您就知道会发生什么。

答案 3 :(得分:0)

有几种方法可以从数据库中选择特定记录或记录组。例如,您可以通过以下方式获得一个俱乐部:

@club = Club.find(x)

其中x是俱乐部的id。然后在您的视图(.html.erb文件)中,您只需访问@club对象的属性。

您还可以投射更广泛的网络:

@disco_clubs = Club.where(type: "disco") # returns an ActiveRecord Relation
@disco_clubs = Club.where(type: "disco").to_a # returns an array

然后你可以像在index.html.erb中那样迭代它们。 Rails具有丰富的查询数据库的接口。请查看here

另请注意,单个记录(例如使用find方法选择的记录)更常用于show操作,用于显示单个记录。当然,这是针对通用CRUD应用程序的。这不是一个很难的规则。