2011-04-06 48 views
5

我正在尝试学习RoR,构建我的第一个应用程序,一个基本的库存应用程序。我试过四处搜寻,但找不到正确的语法,所以我想我会问。Rails 3 - 通过名称而不是id查找

这里是我的设立:

型号

class Item < ActiveRecord::Base 
belongs_to :supplier 

class Supplier < ActiveRecord::Base 
has_many :items 

项目控制器

@items = Item.find_all_by_supplier_id '1' 

这将返回我想要的数据,但我希望输入供应商名称进入控制器,这样如果ID不匹配,它仍然可以正常工作。

希望这是足够的信息,谢谢!

回答

17

你可以翻转你的方法,并再试:

@items = Supplier.find_by_name('THE NAME').items 

Rails的创建动态find_by_ *和搜索find_all_by_ *方法。我不建议您通过supplier_id检索项目,而是建议您让rails使用上面的代码片段中设置的关联来完成此操作。在内部,这仍然使用supplier_id,但是rails正在处理流程而不是你。

这反过来也是可能的,所以如果你有一个项目,并希望供应商,你可以这样做:

Item.find(1).supplier 
+0

谢谢先生!这就像一个魅力。 – rmp 2011-04-06 20:16:25

0
@items = Item.joins(:suplier).where(:suplier => { :name => "Suplier name" }) 
0
Supplier.find_by_colname(params[:name]) 

colnameSupplier table column名称中,我们想检查我们的参数值。在rails中,我们可以在上面添加find_by_的列名,并且rails会告诉你它是神奇的;)。这里是参考Doc

相关问题