选择会对模型

问题描述:

一个唯一的ID,其值我有两个车型优惠和餐馆选择会对模型

我想显示每个餐厅的交易。我不希望他们链接在:restaurant_id上,而是我希望他们链接在:restaurant_name上。

我无法弄清楚的是如何在控制器

restaurant controller 

def show 
    @restaurant = Restaurant.find(params[:id]) 
    @deals = @restaurant.deals 
end 



show.html.erb 

<% restaurant.deals.each do |deal| %> 
     <h2><center><%= deal.day %></center></h2> 
<% end %> 

任何想法上:restaurant_name他们联系呢?

+1

你的意思是这样的吗? http://stackoverflow.com/questions/17755815/ruby-on-rails-find-by-field-other-than-id – Matt 2014-09-05 20:31:58

+0

@Matt,我认为[that question](http://stackoverflow.com/问题/ 17755815/ruby​​-on-rails-find-by-field-other-than-id)是指'find',但是OP询问'belongs_to' – 2014-09-05 20:38:41

如果你一定要说我可能会认为这是一个坏主意,因为如果名称改变链断裂。

class Restaurant 
    has_many :deals, foreign_key: "restaurant_name", primary_key: "name" 
end 
class Deals 
    belongs_to :restaurant, foreign_key: "restaurant_name", primary_key: "name" 
end 

这假设模型Restaurant使用name,而不是restaurant_name但概念是has_manyforeign_key将是关键中的其他表使用,primary_key将在当前表的链接。 belongs_toforeign_key将是当前表格中使用的关键字,而primary_key将成为另一张表格中的关键字。

我想显示每家餐厅的优惠。我不希望它们链接在:restaurant_id,而是我希望它们链接在:restaurant_name。

从数据库的角度来看,假设一个关系型数据库,你deals表将有一个外键引用restaurants。现在,你知道该怎么称呼它,belongs_to文档的这一部分应该回答你的问题:

:foreign_key

指定用于关联的外键。默认情况下,这个猜测是用“_id”后缀协会的名称...

现在你已经知道如何实现您协会,我要指出的是,许多餐馆世界共享同一个名字,所以restaurant_name可能是外键差的选择。

+0

+1的数字出来的方法和指出这可能是一个糟糕的设计理念,因为我完全同意这两个方面。尽管我确实也指定了答案。 – engineersmnky 2014-09-05 20:40:35

+0

雅我同意糟糕的设计,它不那么我会这样做,尽可能多我想知道如何做到这一点。不过谢谢。 – Seal 2014-09-05 20:46:58

+0

如果我不添加名称,比每次添加交易我都必须记住restaurant_id? – Seal 2014-09-05 21:31:58