我有一个这样的模型:
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由两者共享,但我很难过。
答案 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 %>