从 rabl 模板访问模型方法
Access model method from rabl template
我正在尝试在 Rails rabl 模板上访问 Ruby 中的模型方法,但我无法弄清楚如何将参数传递给函数。这是模型代码 -
class Conversation < ActiveRecord::Base
has_many :messages, dependent: :destroy
belongs_to :sender, foreign_key: :sender_id, class_name: User
belongs_to :recipient, foreign_key: :recipient_id, class_name: User
def opposed_user(user)
user == recipient ? sender : recipient
end
end
这是我的 rabl 模板文件 -
collection @conversations, object_root: false
attributes :id, :sender_id, :recipient_id
node :otheruser do |c|
c.opposed_user(current_user)
end
具体来说,我正在尝试 return opposed_user
,但上面的错误是 wrong number of arguments (0 for 1)
。 current_user
是 return 正确的用户,所以这是简单的事情还是我以错误的方式处理它?
更新
如果我使用 c.opposed_user(current_user).to_json
它可以工作,但是 json 是 return 转义字符串而不是实际的 json 对象。我想也许我需要使用 child 而不是 node 但不确定。
听起来你已经很接近解决这个问题了。您可以使用 as_json
而不是 to_json
来修复您已有的 RABL 模板。
最终模板如下所示:
collection @conversations, object_root: false
attributes :id, :sender_id, :recipient_id
node :otheruser do |c|
c.opposed_user(current_user).as_json
end
使用 RABL,有许多不同的方法来处理事情。当您使用 node
时,如果您提供一个字符串,它只会添加一个键。由于 to_json
returns 是一个字符串,因此您最终会得到类似 { otheruser: "whatever string you provided" }
.
的内容
但是,如果您使用 as_json
,您将最终提供一个 node
也可以处理的散列。例如,像这样:
node :otheruser do |c|
{ id: 1, name: 'Bob' }
end
您最终会得到 JSON,看起来像:{ otheruser: { id: 1, name: 'Bob' } }
。这是 link to the documentation on node in RABL.
我正在尝试在 Rails rabl 模板上访问 Ruby 中的模型方法,但我无法弄清楚如何将参数传递给函数。这是模型代码 -
class Conversation < ActiveRecord::Base
has_many :messages, dependent: :destroy
belongs_to :sender, foreign_key: :sender_id, class_name: User
belongs_to :recipient, foreign_key: :recipient_id, class_name: User
def opposed_user(user)
user == recipient ? sender : recipient
end
end
这是我的 rabl 模板文件 -
collection @conversations, object_root: false
attributes :id, :sender_id, :recipient_id
node :otheruser do |c|
c.opposed_user(current_user)
end
具体来说,我正在尝试 return opposed_user
,但上面的错误是 wrong number of arguments (0 for 1)
。 current_user
是 return 正确的用户,所以这是简单的事情还是我以错误的方式处理它?
更新
如果我使用 c.opposed_user(current_user).to_json
它可以工作,但是 json 是 return 转义字符串而不是实际的 json 对象。我想也许我需要使用 child 而不是 node 但不确定。
听起来你已经很接近解决这个问题了。您可以使用 as_json
而不是 to_json
来修复您已有的 RABL 模板。
最终模板如下所示:
collection @conversations, object_root: false
attributes :id, :sender_id, :recipient_id
node :otheruser do |c|
c.opposed_user(current_user).as_json
end
使用 RABL,有许多不同的方法来处理事情。当您使用 node
时,如果您提供一个字符串,它只会添加一个键。由于 to_json
returns 是一个字符串,因此您最终会得到类似 { otheruser: "whatever string you provided" }
.
但是,如果您使用 as_json
,您将最终提供一个 node
也可以处理的散列。例如,像这样:
node :otheruser do |c|
{ id: 1, name: 'Bob' }
end
您最终会得到 JSON,看起来像:{ otheruser: { id: 1, name: 'Bob' } }
。这是 link to the documentation on node in RABL.