Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RABL render JSON对象if语句_Ruby On Rails_Json_Rabl - Fatal编程技术网

Ruby on rails RABL render JSON对象if语句

Ruby on rails RABL render JSON对象if语句,ruby-on-rails,json,rabl,Ruby On Rails,Json,Rabl,如果参数等于某个值,RABL将对象呈现为JSON的语法是否正确 if (event.charge == true) { collection @events attributes :title, :date, :time, :venue, :description } 我有一个满是对象的页面,如果字段中的值正确,我希望RABL只将该对象呈现为JSON 非常感谢 是的,您可以在RABL模板中使用条件句。我觉得这个语法很正确。这会给你带来什么麻烦吗 请注意,由于您正在将event.char

如果参数等于某个值,RABL将对象呈现为JSON的语法是否正确

if (event.charge == true) {
  collection @events
  attributes :title, :date, :time, :venue, :description
}
我有一个满是对象的页面,如果字段中的值正确,我希望RABL只将该对象呈现为JSON


非常感谢

是的,您可以在RABL模板中使用条件句。我觉得这个语法很正确。这会给你带来什么麻烦吗

请注意,由于您正在将
event.charge
true
进行比较,因此可以省去比较,只需执行以下操作:

if (event.charge) {
  collection @events
  attributes :title, :date, :time, :venue, :description
}
[更新]回复带有附加信息的评论

好的,这里有两个问题

首先,您可能希望使用一个范围来缩小数据库级别的
@事件的集合。从数据库中提取行并从中创建
ActiveRecord
对象是一项昂贵的操作,因此您不希望对不打算使用的行/对象执行此操作

第二个问题与RABL模板的结构有关。gist()中列出的模板应该很有用

collection @events
attributes :title, :date, :time, :venue # ....
node(:imageUrl){|events| events.image.url(:main)}
node(:imageThumbUrl){|events| events.image.url(:thumb)}
这基本上告诉RABL迭代
@events
,为每个事件构建一个包含所列属性的JSON哈希,并在哈希中使用图像url构建额外属性。(我想你已经知道了这一点,只是想澄清一下。)

如果试图用
if event.charge
包装整个模板,则会遇到问题,因为此时没有名为
event
的变量。对
事件
的引用在
节点
块内部起作用,因为RABL在
@events
集合中循环时,当它
产生给所提供的块时,它将在当前事件中传递,并且所提供的块已命名它接收的变量
事件
。(我知道这是一个小循环。我希望它有意义。)

为了说明条件,因为我已经提到过滤集合最好在控制器级别完成,所以让我们假设您有一个要基于事件标题填充的属性。你可以这样做:

node(:is_special) do |event|
  if event.title == 'Some Special Event'
    'Aye, sir!'
  else
    'No way!'
  end
end

我希望这一切都有意义。

我不确定RABL模板是否是实现这一点的最佳场所。能否在控制器中对
@events
集合进行范围限定,使其仅包含要显示的记录?费用列为布尔值,默认为0。我想呈现的事件是电荷为1。我尝试了您的语法,并且尝试了event.charge==1、event.charge==1、event.charge==true和event.charge==true。不幸的是,这些都没有起作用。它仍在渲染每个事件。显示更多RABL模板可能会有所帮助。很不清楚你想在那里做什么。对您的问题的简短回答是,可以在RABL模板中使用
if
。除此之外,似乎你正在尝试做一些不标准的事情。您是否有可能发布控制器操作来设置模板以及您尝试使用的整个模板?这可能会有所帮助。这里有一个费用字段,如果用户付费,我将布尔值从0改为1。我可以设置一个范围。这是否只会呈现符合该范围的事件?就像我在索引操作中做了
@events=Event.comming.paid.all
。好的,太好了,这一要点很有帮助。我刚刚在我的原始答案中添加了一个[更新]。这对我来说非常有意义!谢谢你的帮助杰里米!:)(我对Rails有点陌生,如果你还没有弄明白的话,所以这很有帮助!)