显示数据库表中的所有记录而不是单个记录

时间:2015-06-03 04:50:12

标签: ruby-on-rails

我对rails非常陌生。我正在学习如何将数据库查询传递给json以在视图中呈现它们。

我想执行一个简单的一个表查询(表名为user name:string id:integer),它在模型中执行并传递给控制器​​然后传递给{{1转到index.json.jbuilder

问题在于我打电话

index.html.erb.我得到一个空数组但是当我拨打blabla/index.json时,我会收到用户1的数据,但我希望 所有 用户。

我知道有更简单的方法可以做到这一点,但这就是我想要这样做的方式。如何避免传递user_id来获取记录?

user.rb

blabla/1.json

users_controller.rb

class User < ActiveRecord::Base

def self.feed
"SELECT * FROM User"
end
 end

index.json.jbuilder

   def index
     @users = User.feed
   end

index.html.erb

 json.extract! @user, :id, :name, :created_at, :updated_at

2 个答案:

答案 0 :(得分:2)

def index
  @users = User.get_all
  respond_to do |format|
    format.json {render json: @users}
  end
end

在user.rb

def self.get_all
  User.all
end

答案 1 :(得分:0)

您可以使用user123的答案,因为当与ACL宝石,缓存等绑定时,ORM可以变得超级强大。但是如果需要,您还可以编写更复杂的查询。以下是使用scope与纬度和经度的距离来选择更复杂的用户的示例(您也可以在函数中使用):

scope :near, -> (lat, lng, distance) {
  origin_lat = lat / 180 * Math::PI
  origin_lng = lng / 180 * Math::PI

  select("users.*")
  .select("(ACOS(COS(%{lat})*COS(%{lng})*COS(RADIANS(users.latitude))*COS(RADIANS(users.longitude))+
      COS(%{lat})*SIN(%{lng})*COS(RADIANS(users.latitude))*SIN(RADIANS(users.longitude))+
      SIN(%{lat})*SIN(RADIANS(users.latitude)))*3963) AS distance" % [ lat: origin_lat, lng: origin_lng, distance: distance ])
  .where(["(ACOS(COS(:lat)*COS(:lng)*COS(RADIANS(users.latitude))*COS(RADIANS(users.longitude))+
      COS(:lat)*SIN(:lng)*COS(RADIANS(users.latitude))*SIN(RADIANS(users.longitude))+
      SIN(:lat)*SIN(RADIANS(users.latitude)))*3963) <= :distance", lat: origin_lat, lng: origin_lng, distance: distance])
  .order('distance DESC')
}

然后,您可以将其称为User.near(lat, lng, distance),它将返回一定距离内的所有实例。

当涉及到它时,它只是知道将字符串放在Rails中的位置&#39; query builder