我对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
答案 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