0

Userhas_many Tickets.

Ticket所属先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

ticket_controller.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 を持つチケットだけでなく、すべてのチケットが表示されます。

私のルートが間違っているか、まったく別のものである可能性があります。どんな助けでも大歓迎です。

編集

私の問題は、そのビューを、、などに使用したいので (DRY に保つために) @tickets、さまざまな方法で ticket_controller/index メソッドを呼び出す必要があることだと思います。@tickets.all@user.tickets@facility.tickets

チケットの同じインデックス リストは、元のリンクに基づいて変更する必要があります (それがユーザー リストからのもので、そのユーザーによるすべてのチケットのリストを表示するか、ファシリティ リストからのもので、すべてのチケットのリストを表示します)。その施設)。私はどこかでひどく間違ったことをしているだけです。

私が試す可能な解決策:

のようなカスタムルートを作成し、そのメソッドに条件をget 'users_tickets' => "users#users_tickets"入れて、@ticketsそのように shared/tickets.html.erb を呼び出す必要があるかもしれません。

4

3 に答える 3

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 を再定義していますが、users_controller で @tickets をそのユーザーに属するものとして定義したことは気にしません。ticket_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 に答える