任何人都可以提供有关如何在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控制器中实现上述功能的例子。
答案 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(其中*是传入的变量(主席的年龄)。