Rails - 渲染自定义xml

时间:2011-09-07 11:51:39

标签: ruby-on-rails ruby xml ruby-on-rails-3

任何人都可以提供有关如何在rails控制器中使用FOR和IF循环的任何示例吗?

这是一些'伪代码'(使用非常松散的术语),它有望说明我想做什么 -

为了这个例子,我正在使用一个名为'chairs'的表,我想查询'age'列以显示所有(例如)2岁的椅子。 [:id]是我传入它的数字变量。 在我的工作项目中,我已经设置了路径,并且能够渲染基本:所有xml到URL,但我需要它来显示特定记录,如下所示......

For each chair in chairs
    if chair.age = [:id]
        render records to xml
    end
end

感谢任何帮助。

编辑 - 我理解FOR和IF循环是如何工作的,只需要一些如何在rails控制器中实现上述功能的例子。

3 个答案:

答案 0 :(得分:3)

在你的椅子模型中:

class Chair < ActiveRecord::Base
  :scope :years_old, lambda { |time_ago| { :conditions => ['age == ?', time_ago] }
end

然后你可以这样做:

render :xml => Chairs.years_old(2)

我对渲染的确切语法模糊不清,但是创建范围可以让你的控制器代码更具可读性,而不必在那里进行循环/条件化。只需将您的示波器命名为清晰且易于理解的内容......

这一切都假定您希望获得所有年龄== 2的椅子,而不仅仅是其他搜索的一部分。如果这个假设是错误的,那么Lucapette的答案会更好。

答案 1 :(得分:1)

尝试类似:

render :xml => chairs.select { |c| c.age== [:id]}

答案 2 :(得分:1)

感谢您的建议,帮助很多。这是我做的工作,也许其他人会觉得它很有用(我不知道这是不是最好的方法,但它有效)

首先在routes.rb中设置路线 -     匹配'/ chair / age /:id',: controller =&gt; 'chairs',:action =&gt; 'displaychairs'

然后在椅子控制器 -

def displaychairs
    chid=params[:id]
    @chairs = Chair.find(:all, :conditions => [ "age = ?",chid])

        respond_to do |format|
            format.xml { render :xml => @chairs }
    end
end

然后我可以在我的app中使用/chair/age/*.xml(其中*是传入的变量(主席的年龄)。