

下記のコードで "Couldn't find User without an ID" というエラーになってしまいます。

[![画像の説明をここに入力](https://i.stack.imgur.com/ZUUWJ.png)](https://i.stack.imgur.com/ZUUWJ.png)

[code]

    def index
      @user = User.find(params[:id])
    
      sort_key = (params[:column].blank? || params[:order].blank?) ? {updated_at: 'DESC'} : {params[:column] => params[:order]}
    
      if @user == current_user
        @origques = Origque.select('origques.*', 'count(quefavorites.id) AS favs')
        .left_joins(:quefavorites).group('origques.id').order(sort_key).where(user_id: params[:id])
        .includes(:quefavorite_users)
    
      else
        @origques = Origque..select('origques.*', 'count(quefavorites.id) AS favs')
        .left_joins(:quefavorites).group('origques.id').order(sort_key).where(publish_check: true)
        .where(user_id: params[:id]).includes(:quefavorite_users)
      end
    end
    
[/code]

viewからsortのボタンを押すとindexでエラーになります。  
binding.pryをしてみたところ、`params[:id]=2` と値が取れておりました。

[code]

    @origques = Origque.select('origques.*', 'count(quefavorites.id) AS favs')    .left_joins(:quefavorites).group('origques.id').order(sort_key).where(user_id: params[:id]) .includes(:quefavorite_users)
    
[/code]

の箇所の書き方に問題があるような気もします。

原因がわかりましたら、教えてください。

**（追記）**

エラー画面でparams[:id]を検索するとnilになっているので  
パラメーターが渡っていないということだと思います。

binding.pryはエラー箇所のすぐ下で実行してみました。

[![画像の説明をここに入力](https://i.stack.imgur.com/f06dr.png)](https://i.stack.imgur.com/f06dr.png)

[![画像の説明をここに入力](https://i.stack.imgur.com/NACQP.png)](https://i.stack.imgur.com/NACQP.png)

viewからUser.idを渡せていないとすると  
下記のコードにhiddenか何かでパラメータを  
渡すことができれば、解決できる気がします。

色々調べましたが、コードの書き方がわかりません。

[code]

    <%= form_tag :user_ques, method: :get, class: "search top-margin" do %>
      <% params.slice(:column, :order).each do |key, val| %>
        <%= hidden_field_tag key, val %>
      <% end %>
      <%= text_field_tag "q", params[:q], class: "search-design" %>
      <%= submit_tag "sch", class: "btn-search" %>
    <% end %>
    
[/code]

下記のように、<%= hidden_field_tag :id, @user.id %>を追記して  
みましたが、やはり同様にcontrollerで"Couldn't find User without an ID" の  
エラーになってしまいます。

[code]

    <%= form_tag :user_ques, method: :get, class: "search top-margin" do %>
      <% params.slice(:column, :order).each do |key, val| %>
        <%= hidden_field_tag key, val %>
      <% end %>
      <%= hidden_field_tag :id, @user.id %>
      <%= text_field_tag "q", params[:q], class: "search-design" %>
      <%= submit_tag "sch", class: "btn-search" %>
    <% end %>
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/fLUI9.png)](https://i.stack.imgur.com/fLUI9.png)  
パラメータはnilとなっております。

route.rbは下記のように記載しております。[![画像の説明をここに入力](https://i.stack.imgur.com/kPdnl.png)](https://i.stack.imgur.com/kPdnl.png)  
form_tag :user_ques でviewのindexへ渡しています。

[code]

      resources :user_ques, only: [:index,:edit, :update, :destroy] do
        get "search", on: :collection
      end
    
[/code]

button_toを使っているえerbを呼び出しており、そこにid:params[:id]を記述することで  
解決できました。

[code]

      <li><%= button_to "⬇︎", {controller: 'user_ques', action: 'index'}, {method: :get, class: "order-button", params: {column: 'id',id:params[:id], order: 'DESC',q: params[:q]}} %>
    
[/code]


CC BY-SA 4.0
2020-01-18T06:15:31.980
62343
2022-01-07T21:08:00.793
2020-04-11T03:05:11.547
37468
37468
question
ruby-on-rails ruby sql
Couldn't find User without an IDのエラー


各erbファイルに  
<%= hidden_field_tag :id, @user.id %>  
と  
id:params[:id]  
を追記することで解決できました。


CC BY-SA 4.0
2020-01-26T13:22:25.977
62562
2020-01-26T13:22:25.977
37468
62343
answer