Как вывести список всех экземпляров поля ассоциации на странице индекса в Rails - PullRequest
0 голосов
/ 06 июля 2018

У меня есть две модели в отношении has_one Proper_to:

class Facility < ApplicationRecord
   has_one :machine
end


class Machine < ApplicationRecord
   belongs_to :facility
end

При создании новой машины у меня есть коллекция collection_select для сохранения объекта:

<%= collection_select(:machine, :facility_id, Facility.all, :id, 
:facility_name, prompt: true) %>

На странице индекса, когда я пытаюсь перечислить все машины, я получаю сообщение об ошибке:

undefined method `facility_name'

Вот мой код:

<table class="table table-responsive table-striped table-bordered table-hover 
table-sm ">
  <thead>
    <tr>
      <th>Facility Name</th>
     .
     .
     .
   <th></th>
  <th></th>
  <th></th>
 </tr>
</thead>

<tbody>
 <% @machines.each do |machine| %>
   <tr>
     <td><%= machine.facility.facility_name %></td>
   .
   .
   .
    <td><%= link_to 'Show', machine %></td>
    <td><%= link_to 'Edit', edit_machine_path(machine) %></td>
    <td><%= link_to 'Destroy', machine, method: :delete, data: { confirm: 
   'Are you sure?' } %></td>
   </tr>
  <% end %>
 </tbody>
</table>

Как мне избавиться от ошибки?

Ответы [ 3 ]

0 голосов
/ 08 июля 2018

Ваш код выглядит нормально, даже если вы не используете помощников объекта модели .

Может быть, записи не сохраняются по какой-либо причине?Я предполагаю: разрешение сильных параметров?

Попробуйте в консоли Machine.select(:id, :facility_id) проверить, существует ли запись и есть ли у всех facility_id:

#<ActiveRecord::Relation [#<Machine id: 1, facility_id: 1>, #<Machine id: 2, facility_id: 2>, #<Machine id: 3, facility_id: 3>, ....

В любом случае, отправьте полное сообщение об ошибке.


Просто чтобы знать, что ваша ассоциация для Facility равна has_one :machine, но с формой кажется, что вы можете назначить одно и то же средство многим машинам.
0 голосов
/ 11 июля 2018

Потратив на это несколько часов, я понял, что поле unit_id в таблице пустое!Теперь у меня есть идея по отладке ошибок nil:NilClass undefined method.

Спасибо!

0 голосов
/ 06 июля 2018

Попробуйте удалить collection_select, используйте только выберите select, так как вы просто хотите сохранить идентификатор Facility в Machine, а не массив идентификаторов.

попробуйте что-то вроде этого:

<%= f.select :facility_id, options_for_select(Facility.all.pluck(:facility_name, :id),:selected => f.object.facility_id), {:prompt => 'Select facility'}%>

здесь f - экземпляр машины во время действия создания

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...