我的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而不是全部数据库。
非常感谢!
答案 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应用程序的。这不是一个很难的规则。