0

Userhas_many Tickets

Ticket属于_to User( ticket.user_id)

路线.rb

resources :users do
  resources :tickets
end

耙路线

user_tickets GET /users/:user_id/tickets(.:format) tickets#index

用户/index.html.erb

<%= link_to("View User's Tickets", user_tickets_path(user)) %>

users_controller.rb

private
def set_user
  @user = User.find(params[:id])
  @tickets = @user.tickets
end

门票控制器.rb

def index
  @search = Ticket.search(params[:q])
  @tickets = @search.result.paginate(:page => params[:page], :per_page => 25)
  render 'shared/tickets.html.erb'
end

当我将鼠标悬停在链接上时,它显示.../users/[the selected user's id]/tickets

当它进入工单/索引页面时,它会显示所有工单,而不仅仅是具有所选用户 ID 的工单。

我很确定我的路线不正确,或者可能完全是另外一回事。任何帮助表示赞赏。

编辑

我认为我的问题是我需要以@tickets多种方式调用 ticket_controller/index 方法,因为我想将该视图用于@tickets.all@user.tickets@facility.tickets等(以使其保持干燥)。

相同的工单索引列表需要根据其来源链接进行更改(无论是来自用户列表,显示该用户的所有工单列表,还是来自设施列表,显示所有工单的列表)该设施)。我只是在某个地方做错了什么。

可能的解决方案我会尝试:

也许我需要创建自定义路由,例如get 'users_tickets' => "users#users_tickets",然后将@tickets条件放入该方法并以这种方式调用 shared/tickets.html.erb。

4

3 回答 3

1

听起来您需要逐步了解关联。你用过吗

门票控制器.rb

def index
     @user = User.find(params[:user_id])
     @tickets = @user.tickets
end

在控制器中?如果这没有帮助,您可以发布控制器代码吗?

于 2013-08-13T21:01:22.240 回答
0

好的 - 我想我需要再次查看嵌套资源,因为我认为它们会自动执行我想要的操作......或者他们可能会这样做,但我还不明白。

无论如何,我最终在用户中创建了自定义路由和自定义方法:

路线.rb

 get 'user_tickets' => "users#user_tickets"

users_controller.rb

  def user_tickets
    @user = User.find(params[:id])
    @search = Ticket.where(:user_id => @user.id).search(params[:q])
    @tickets = @search.result.paginate(:page => params[:page], :per_page => 25)
    render 'shared/tickets.html.erb'
  end

然后,调用:

<%= link_to("View Tickets", user_tickets_path(:id => user.id)) %>

我会为设施、部门等做同样的事情。不确定这是最好的方法,但它确实有效。

感谢大家刺激我的脑细胞。

于 2013-08-13T22:34:47.643 回答
0

你不是想减少@tickets 而不是做另一个查询吗?

现在您正在重新定义@tickets,当他们到达门票索引时,您将@tickets 定义为仅属于users_controller 上的该用户并不关心。它只是忽略了这一点,因为您在 ticket_controller 索引操作中使用了直接分配。你可能想要这样的东西:

门票控制器.rb

def index
    @search = Ticket.search(params[q])
    @tickets = @search.result.where(user: @user)
    @tickets = @tickets.paginate(:page => params[:page], :per_page => 25)
end

未经测试,但我认为这就是你想要的。

于 2013-08-13T21:51:45.043 回答