此代码段
room = Room.find(roomId)
从房间表返回一个列,返回的值包含多个属性,例如id
,name
,description
,duration
。
编码时我想要
render json: room
仅返回duration
和name
。
我必须写那样的东西
render json: room[:duration, :name]
答案 0 :(得分:3)
查询只会为您提供所需的属性:
room = Room.select(:id, :duration, :name).find(room_id)
答案 1 :(得分:2)
您可以使用as_json
的only
选项仅包含某些属性。
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"为了你的记录。