按链接字段查找Rails 5

时间:2017-03-15 16:08:13

标签: ruby-on-rails

我有一个这样的模型:

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

如果我想查找特定交易中列出的所有客户,我可以在控制台中输入Client.find_by(deal_id: x),其中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由两者共享,但我很难过。

1 个答案:

答案 0 :(得分: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 %>