質問編集履歴

3 viewファイルを追加しました

haruka1997

haruka1997 score 12

2019/03/01 13:53  投稿

【Ruby on Rails】NoMethodErrorの解決法
### 前提・実現したいこと
NoMethodError を解決したいです。
名前の検索ボックスを実装中に以下のエラーメッセージが発生しました。
``````index.html.erb  
NoMethodError in Goodthing#index  
Showing /home/ec2-user/environment/web-app/app/views/goodthing/index.html.erb where line #21 raised:  
 
private method `select' called for nil:NilClass  
Extracted source (around line #21):  
           
18        <div style="padding-top: 0;">  
19          <div style="float: left; clear: none; padding-top: 0; padding-buttom: 0;">  
20            <label><%= t(".full_name") %></label>  
21        <%= f.select :name, @users_name, {:include_blank => 'true'}, {:class => 'search_combobox'} %>  
22          </div>  
23        </div>  
24        <div style="padding-top: 0;">  
```  
 
viewはこちらになります。  
```  
<div class="box">  
 <p>  
  <%= t(".goodthing")%>  
 </p>  
 <div>  
   <!--検索フォーム-->  
   <div>  
   <%= form_tag(goodthing_path, :method => :get) do |f| %>  
   <fieldset>  
     <!-- datepicker部分 -->  
     <legend><%= t(".filter") %></legend>  
     <div>  
       <div style="float: left; clear: none; padding-top: 0; padding-buttom: 0;">  
         <label><%= t(".date") %></label>  
         <input type="text" name="date" class="datepicker">~<input type="text" name="date" class="datepicker">  
       </div>  
     </div>  
     <div style="padding-top: 0;">  
       <div style="float: left; clear: none; padding-top: 0; padding-buttom: 0;">  
         <label><%= t(".full_name") %></label>  
     <%= f.select :name, @users_name, {:include_blank => 'true'}, {:class => 'search_combobox'} %>  
       </div>  
     </div>  
     <div style="padding-top: 0;">  
       <div style="float: left; clear: none; padding-top: 0; padding-buttom: 0;">  
         <label><%= t(".membership") %></label>  
       <%= text_field_tag "search[membership]", @membership %>  
       </div>  
       <div class="btn-box" style="float: right;">  
       <%= submit_tag(t(".search")) %>  
     </div>  
   </div>  
   </fieldset>  
   <% end %>  
   </div>  
    <div style="float: right;"><%= link_to t(".csv_download"), goodthing_path(format: :csv, goodthing_form: {from_to: @from_to, sort_key: "total_point", sort_order: 'desc'}) %></div>  
     
   <div class="goodthing" style="padding-bottom: 0px;">  
   <% if @search_date %>  
     <h3><%= Date.parse(@search_date).strftime(t".search_date_result") + t(".goodthing") %></h3>  
   <% end %>  
   </div>  
   <table class="table" style="margin-top: 0px;">  
     <thead>  
       <tr>  
         <th>  
           <%= t(".name") %>  
         </th>  
         <th>  
           <%= t(".date") %>  
         </th>  
         <th>  
           <%= t(".comment") %>  
         </th>  
       </tr>  
     </thead>  
 
     <% if @search_date %>  
     <tbody>  
     <% @users.each do |user| %>  
         <tr>  
           <td rowspan="3">  
             <%= user.profile.name %>  
           </td>  
           <td>  
             <%= t(".done") %>  
           </td>  
           <td>  
             <% if user.goodthing.find_by(recorded_on: @search_date).present? %>  
               <%= user.goodthing.find_by(recorded_on: @search_date).message1 %>  
             <% end %>  
           </td>  
         </tr>  
         <tr>  
           <td>  
             <%= t(".happy") %>  
           </td>  
           <td>  
             <% if user.goodthings.find_by(recorded_on: @search_date).present? %>  
               <%= user.goodthing.find_by(recorded_on: @search_date).message2 %>  
             <% end %>  
           </td>  
         </tr>  
         <tr>  
           <td>  
             <%= t(".learned") %>  
           </td>  
           <td>  
             <% if user.goodthing.find_by(recorded_on: @search_date).present? %>  
               <%= user.goodthing.find_by(recorded_on: @search_date).message3 %>  
             <% end %>  
           </td>  
         </tr>  
     <% end %>  
     </tbody>  
     <% end %>  
   </table>  
 </div>  
</div>  
 
 
<!-- datepicker部分-->  
 <script>  
   $(function(){  
     $("#datepicker").datepicker({  
       buttonImageOnly: true,  
       buttonImage: "<%= asset_path('calender.png') %>"  
     });  
   });  
 </script>  
   
<script>  
 $(function(){  
   $(".search_combobox").combobox()  
 });  
</script>  
```  
 
ちなみに、controllerはこちらになります。  
```  
class GoodthingController < BaseController  
   
 set_function_label :user_management  
end  
 
def index  
  @goodthing_form = GoodthingForm.new(goodthing_form_params)  
   @date_from = @goodthing_form.from  
   @date_to = @goodthing_form.to  
   @name = @goodthing_form.name  
   @group = @goodthing_form.group  
   @users_name = current_organization.users.without_soft_destroyed.map {|user| user.profile.name }  
   @groups_name = current_organization.groups.map {|group| group.name }  
 
 
```  
コントローラー側で@users_nameを修正しなきゃいけないのかな?と思いつつ
どうすればいいかググってもわからなかったので質問させていただきました。
どなたか教えていただければ幸いです。
  • Ruby on Rails

    19486 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

2 viewファイルを追加しました

haruka1997

haruka1997 score 12

2019/03/01 11:10  投稿

【Ruby on Rails】NoMethodErrorの解決法
### 前提・実現したいこと
NoMethodError を解決したいです。
名前の検索ボックスを実装中に以下のエラーメッセージが発生しました。
``````index.html.erb
NoMethodError in Goodthing#index
Showing /home/ec2-user/environment/web-app/app/views/goodthing/index.html.erb where line #21 raised:
private method `select' called for nil:NilClass
Extracted source (around line #21):
         
18        <div style="padding-top: 0;">
19          <div style="float: left; clear: none; padding-top: 0; padding-buttom: 0;">
20            <label><%= t(".full_name") %></label>
21        <%= f.select :name, @users_name, {:include_blank => 'true'}, {:class => 'search_combobox'} %>
22          </div>
23        </div>
24        <div style="padding-top: 0;">
```
viewはこちらになります。
```
<div class="box">
 <p>
  <%= t(".goodthing")%>
 </p>
 <div>
   <!--検索フォーム-->
   <div>
   <%= form_tag(goodthing_path, :method => :get) do |f| %>
   <fieldset>
     <!-- datepicker部分 -->
     <legend><%= t(".filter") %></legend>
     <div>
       <div style="float: left; clear: none; padding-top: 0; padding-buttom: 0;">
         <label><%= t(".date") %></label>
         <input type="text" name="date" class="datepicker">~<input type="text" name="date" class="datepicker">
       </div>
     </div>
     <div style="padding-top: 0;">
       <div style="float: left; clear: none; padding-top: 0; padding-buttom: 0;">
         <label><%= t(".full_name") %></label>
     <%= select :name, @users_name, {:include_blank => 'true'}, {:class => 'search_combobox'} %>
     <%= f.select :name, @users_name, {:include_blank => 'true'}, {:class => 'search_combobox'} %>
       </div>
     </div>
     <div style="padding-top: 0;">
       <div style="float: left; clear: none; padding-top: 0; padding-buttom: 0;">
         <label><%= t(".membership") %></label>
       <%= text_field_tag "search[membership]", @membership %>
       </div>
       <div class="btn-box" style="float: right;">
       <%= submit_tag(t(".search")) %>
     </div>
   </div>
   </fieldset>
   <% end %>
   </div>
    <div style="float: right;"><%= link_to t(".csv_download"), goodthing_path(format: :csv, goodthing_form: {from_to: @from_to, sort_key: "total_point", sort_order: 'desc'}) %></div>
   
   <div class="goodthing" style="padding-bottom: 0px;">
   <% if @search_date %>
     <h3><%= Date.parse(@search_date).strftime(t".search_date_result") + t(".goodthing") %></h3>
   <% end %>
   </div>
   <table class="table" style="margin-top: 0px;">
     <thead>
       <tr>
         <th>
           <%= t(".name") %>
         </th>
         <th>
           <%= t(".date") %>
         </th>
         <th>
           <%= t(".comment") %>
         </th>
       </tr>
     </thead>
     <% if @search_date %>
     <tbody>
     <% @users.each do |user| %>
         <tr>
           <td rowspan="3">
             <%= user.profile.name %>
           </td>
           <td>
             <%= t(".done") %>
           </td>
           <td>
             <% if user.goodthing.find_by(recorded_on: @search_date).present? %>
               <%= user.goodthing.find_by(recorded_on: @search_date).message1 %>
             <% end %>
           </td>
         </tr>
         <tr>
           <td>
             <%= t(".happy") %>
           </td>
           <td>
             <% if user.goodthings.find_by(recorded_on: @search_date).present? %>
               <%= user.goodthing.find_by(recorded_on: @search_date).message2 %>
             <% end %>
           </td>
         </tr>
         <tr>
           <td>
             <%= t(".learned") %>
           </td>
           <td>
             <% if user.goodthing.find_by(recorded_on: @search_date).present? %>
               <%= user.goodthing.find_by(recorded_on: @search_date).message3 %>
             <% end %>
           </td>
         </tr>
     <% end %>
     </tbody>
     <% end %>
   </table>
 </div>
</div>
<!-- datepicker部分-->
 <script>
   $(function(){
     $("#datepicker").datepicker({
       buttonImageOnly: true,
       buttonImage: "<%= asset_path('calender.png') %>"
     });
   });
 </script>
 
<script>
 $(function(){
   $(".search_combobox").combobox()
 });
</script>
```
ちなみに、controllerはこちらになります。
```
class GoodthingController < BaseController
 
 set_function_label :user_management
end
def index
  @goodthing_form = GoodthingForm.new(goodthing_form_params)
   @date_from = @goodthing_form.from
   @date_to = @goodthing_form.to
   @name = @goodthing_form.name
   @group = @goodthing_form.group
   @users_name = current_organization.users.without_soft_destroyed.map {|user| user.profile.name }
   @groups_name = current_organization.groups.map {|group| group.name }
```
コントローラー側で@users_nameを修正しなきゃいけないのかな?と思いつつ
どうすればいいかググってもわからなかったので質問させていただきました。
どなたか教えていただければ幸いです。
  • Ruby on Rails

    19486 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1 viewファイルを追加しました。

haruka1997

haruka1997 score 12

2019/03/01 11:09  投稿

【Ruby on Rails】NoMethodErrorの解決法
### 前提・実現したいこと
NoMethodError を解決したいです。
名前の検索ボックスを実装中に以下のエラーメッセージが発生しました。
``````index.html.erb
NoMethodError in Goodthing#index
Showing /home/ec2-user/environment/web-app/app/views/goodthing/index.html.erb where line #21 raised:
private method `select' called for nil:NilClass
Extracted source (around line #21):
         
18        <div style="padding-top: 0;">
19          <div style="float: left; clear: none; padding-top: 0; padding-buttom: 0;">
20            <label><%= t(".full_name") %></label>
21        <%= f.select :name, @users_name, {:include_blank => 'true'}, {:class => 'search_combobox'} %>
22          </div>
23        </div>
24        <div style="padding-top: 0;">
```
viewはこちらになります。  
```  
<div class="box">  
 <p>  
  <%= t(".goodthing")%>  
 </p>  
 <div>  
   <!--検索フォーム-->  
   <div>  
   <%= form_tag(goodthing_path, :method => :get) do |f| %>  
   <fieldset>  
     <!-- datepicker部分 -->  
     <legend><%= t(".filter") %></legend>  
     <div>  
       <div style="float: left; clear: none; padding-top: 0; padding-buttom: 0;">  
         <label><%= t(".date") %></label>  
         <input type="text" name="date" class="datepicker">~<input type="text" name="date" class="datepicker">  
       </div>  
     </div>  
     <div style="padding-top: 0;">  
       <div style="float: left; clear: none; padding-top: 0; padding-buttom: 0;">  
         <label><%= t(".full_name") %></label>  
     <%= select :name, @users_name, {:include_blank => 'true'}, {:class => 'search_combobox'} %>  
       </div>  
     </div>  
     <div style="padding-top: 0;">  
       <div style="float: left; clear: none; padding-top: 0; padding-buttom: 0;">  
         <label><%= t(".membership") %></label>  
       <%= text_field_tag "search[membership]", @membership %>  
       </div>  
       <div class="btn-box" style="float: right;">  
       <%= submit_tag(t(".search")) %>  
     </div>  
   </div>  
   </fieldset>  
   <% end %>  
   </div>  
    <div style="float: right;"><%= link_to t(".csv_download"), goodthing_path(format: :csv, goodthing_form: {from_to: @from_to, sort_key: "total_point", sort_order: 'desc'}) %></div>  
     
   <div class="goodthing" style="padding-bottom: 0px;">  
   <% if @search_date %>  
     <h3><%= Date.parse(@search_date).strftime(t".search_date_result") + t(".goodthing") %></h3>  
   <% end %>  
   </div>  
   <table class="table" style="margin-top: 0px;">  
     <thead>  
       <tr>  
         <th>  
           <%= t(".name") %>  
         </th>  
         <th>  
           <%= t(".date") %>  
         </th>  
         <th>  
           <%= t(".comment") %>  
         </th>  
       </tr>  
     </thead>  
 
     <% if @search_date %>  
     <tbody>  
     <% @users.each do |user| %>  
         <tr>  
           <td rowspan="3">  
             <%= user.profile.name %>  
           </td>  
           <td>  
             <%= t(".done") %>  
           </td>  
           <td>  
             <% if user.goodthing.find_by(recorded_on: @search_date).present? %>  
               <%= user.goodthing.find_by(recorded_on: @search_date).message1 %>  
             <% end %>  
           </td>  
         </tr>  
         <tr>  
           <td>  
             <%= t(".happy") %>  
           </td>  
           <td>  
             <% if user.goodthings.find_by(recorded_on: @search_date).present? %>  
               <%= user.goodthing.find_by(recorded_on: @search_date).message2 %>  
             <% end %>  
           </td>  
         </tr>  
         <tr>  
           <td>  
             <%= t(".learned") %>  
           </td>  
           <td>  
             <% if user.goodthing.find_by(recorded_on: @search_date).present? %>  
               <%= user.goodthing.find_by(recorded_on: @search_date).message3 %>  
             <% end %>  
           </td>  
         </tr>  
     <% end %>  
     </tbody>  
     <% end %>  
   </table>  
 </div>  
</div>  
 
 
<!-- datepicker部分-->  
 <script>  
   $(function(){  
     $("#datepicker").datepicker({  
       buttonImageOnly: true,  
       buttonImage: "<%= asset_path('calender.png') %>"  
     });  
   });  
 </script>  
   
<script>  
 $(function(){  
   $(".search_combobox").combobox()  
 });  
</script>  
```  
ちなみに、controllerはこちらになります。
```
class GoodthingController < BaseController
 
 set_function_label :user_management
end
def index
  @goodthing_form = GoodthingForm.new(goodthing_form_params)
   @date_from = @goodthing_form.from
   @date_to = @goodthing_form.to
   @name = @goodthing_form.name
   @group = @goodthing_form.group
   @users_name = current_organization.users.without_soft_destroyed.map {|user| user.profile.name }
   @groups_name = current_organization.groups.map {|group| group.name }
```
コントローラー側で@users_nameを修正しなきゃいけないのかな?と思いつつ
どうすればいいかググってもわからなかったので質問させていただきました。
どなたか教えていただければ幸いです。
  • Ruby on Rails

    19486 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る