从rails上的hash ruby​​访问多个值

时间:2016-03-19 17:49:22

标签: ruby-on-rails ruby hash

此代码段

room = Room.find(roomId)

从房间表返回一个列,返回的值包含多个属性,例如idnamedescriptionduration

编码时我想要

render json: room

仅返回durationname。 我必须写那样的东西

render json: room[:duration, :name]

3 个答案:

答案 0 :(得分:3)

查询只会为您提供所需的属性:

room = Room.select(:id, :duration, :name).find(room_id)

答案 1 :(得分:2)

您可以使用as_jsononly选项仅包含某些属性。

render json: room.as_json(:only => [:duration, :name])

答案 2 :(得分:0)

当你说 //removing document.querySelector("[data-id='start-btn']") .removeEventListener("click", function (evt) { //some code }, false); //attaching new document.querySelector("[data-id='start-btn']") .addEventListener("click", function (evt) { //code }); 从房间表"中返回一个"单列时,你有点不正确。它实际上返回一行。

无论如何,有几种方法可以做到这一点。

一个很好的起点是在模型上使用Room.find(roomId)方法将其转换为哈希。

例如,假设您的用户在数据库中具有名称,电子邮件和ID列。你可以致电.attributes来获取 user.attributes

您可以通过

选择名称和电子邮件

{ "name" => "max", "email" => "max@max.com", "id" => 5 }然后在结果上调用user.select { |k,v| k.in?("name", "email") }

为避免必须为每个控制器响应编写自定义to_json代码,您可以覆盖模型中的to_json。假设我的User表有一个我绝不希望在我的API中公开的密码列:

.attributes

然后,如果您需要将用户列表作为JSON返回:

class User
  def attributes
    super.reject { |k,v| v.in?("password") }
  end
end

顺便说一句,Pavan的答案也会奏效。

另一种方法是使用render json: { users: @users.map(&:attributes) }.to_json, status: 200 并创建json" views"为了你的记录。