在我的rails应用程序中,我可以为该客户端创建客户端和工作人员。目前,我能够列出所有已创建的工人。但是,此列表也包括其他客户的工作人员。
如何在客户端显示页面中仅列出特定客户的所有工作人员?
我觉得这与我的客户#show方法有关。
#----------------Cut Here----------------------
import stem
from stem import Signal
from stem.control import Controller
from stem.connection import connect
import time
#
# Create a new controller
#
controller = Controller.from_port()
Password = "My_Personal_Password"
#
def renew_tor():
global controller
global Password
print ('Renewing Tor Circuit')
if "stem.control.Controller" not in str(controller):
#if global controller exist no more
controller = Controller.from_port()
# debug output
print (controller)
# authenticare the connection with the server control port
controller.authenticate(Password)
print ('Tor running version is : %s' % controller.get_version() )
# force a new circuit
controller.signal(Signal.NEWNYM)
# wait for new circuit
time.sleep(10)
print ('New Tor circuit estabilished')
if __name__ == "__main__":
for i in range (10000):
print ( " Attempt n. : %i " % i)
renew_tor()
#----------------Cut Here(end)--------------------------------------------
提前致谢。
答案 0 :(得分:3)
在ClientsController
中,您的show
操作应该显示Client
,但您的代码是从Worker
获取的。你想要更像这样的东西:
def show
@client = Client.includes(:workers).find(params[:id])
end
# app/views/clients/show.html.erb
<% @client.workers.each do |worker| %>
<%= worker.name %>
<% end %>
注意:看起来您还有set_client
方法正在重新审核当前Client
并设置@client
实例变量。这是一种反模式;在许多情况下,您可以检索不需要的数据,并使您的操作一目了然。少量的非逻辑复制比混淆抽象更好!
答案 1 :(得分:0)
直接回答您的问题:
def show
@client = Client.find params[:id]
@workers = @client.workers
end
假设您正在使用资源丰富的路由,params
哈希将包含URL路径的id部分,此处为/clients/:id
。因此,您可以使用它来查找有问题的特定客户端,然后获取该客户端的工作。
但是,您可能希望在此处阅读有关此主题的大量详细信息: http://guides.rubyonrails.org/routing.html#nested-resources
答案 2 :(得分:0)
首先,您应该在客户端和工作人员之间定义一个has_many关系。
class User < ApplicationRecord
has_many :workers
end
class Worker < ApplicationRecord
belongs_to :user
end
更多信息:Active Record has_many association
然后在&#39;节目&#39;行动你应该得到与特定用户相关的工人。例如:
# GET /clients/1
# GET /clients/1.json
def show
user = User.find(params[:id]) # find specific user
@workers = user.workers # get workers related to this user
# or you can do something like this
@workers = Worker.where(user_id: params[:id])
end