2017-03-15 33 views
2

我有一个是这样的一个模型:通过链接字段查找导轨5

class User < ApplicationRecord 
    has_many :deals 
... 
class Deal < ApplicationRecord 
    belongs_to :user 
    has_many :clients 
... 
class Clients < ApplicationRecord 
    belongs_to :deal 

如果我想找到我可以在其中x是处理控制台输入Client.find_by(deal_id: x)在某个交易中列出的所有客户端我想要的ID,但是当我尝试将它们全部列在页面上时,我做错了什么。

下面是相关的资源路径

Rails.application.routes.draw do 
    resources :deals, only: [:show] 
end 

我认为这个问题是我不是在控制器

class DealsController < ApplicationController 
    def show 
    @deal = Deal.find_by_id(params[:id]) 
    @client = Client.find_by(deal_id: params[:id]) 
    end 
end 

做正确找上我想列出的客户喜欢的页面这样的:

<div class="client"> 
    <% @client.each do |c| %> 
    <%= c.name %> 
    <% end %> 
</div> 

但误差undefined method each' for #<Client:0x007f8e4cdecfb0>

我认为这将是非常简单的,因为从/deal/:id返回的ID是由两者共享,但我很难过。

回答

2

find_by将仅返回一个对象,每个对象都是为数组定义的方法。 所以如果你想客户特定的交易,你可以做

@deal = Deal.find_by_id(params[:id])  
@clients = @deal.clients 

@deal = Deal.find_by_id(params[:id]) 
@clients = Client.where(deal_id: params[:id]) 

,并鉴于

<% @clients.each do |c| %> 
    <%= c.name %> 
<% end %> 
+0

完美,这个伟大的工程!一旦等待期结束,我们会尽快接受。 – oneWorkingHeadphone

+0

我已经做了变量'@ clients',以便它更有意义。你也可以直接在视图中使用'@ deal.clients'。 – Sajin