Привет всем. Очень тяжело дается понимание переменных, символов, экземпляров, что куда передается.
Прошу совета по конкретной задаче, которая поможет улучшить понимание
Есть модели Project и Attachment:
class Project < ApplicationRecord
attr_accessor :temp_file
has_many :attachments
accepts_nested_attributes_for :attachments
end
class Attachment < ApplicationRecord
belongs_to :project
end
Хочу чтобы была форма, через которую добавляется и project и attachment, т е attachment будет вложенный:
форма для метода new:
<%= form_with(model: project, local: true) do |form| %>
<%= form.text_field :name, placeholder: "Name of the Project" %>
<%= form.text_area :info, placeholder: "Project info" %>
<%= form.filestack_field :temp_file, 'Upload Picture Attachment', pickerOptions: {'accept' => 'image/*', onFileUploadFinished: 'onFileUploadFinishedCallback' } %>
<%= form.fields_for :attachments do |att| %>
<%= att.text_field :name, class: 'file_name' %>
<%= att.text_field :url, class: 'file_url' %>
<%= att.text_field :size, class: 'file_size' %>
<%= att.text_field :mimetype, class: 'file_type' %>
<% end %>
<%= form.submit %>
<% end %>
для загрузки использую сервис filestack, у которого есть хелпер filestack_field так что пусть эта строчка не сбивает вас с толку
как правильно отображать поля и для Project и для Attachment на страницах index и show ?
Просто методом тыка и гугленья удалось сделать отображение для index:
app/controllers/projects_controller.rb
def index
@projects = Project.includes(:attachments)
@attachments = Attachment.all
end
app/views/projects/index.html.erb
<%
@projects.each do |project| %>
<tr>
<td><%=
project.name %></td>
<td><%=
project.info %></td>
<td>
<% project.attachments.each do |attachment| %>
<td><%=
attachment.name %></td>
<td><%= attachment.url %></td>
<td><%= attachment.size %></td>
<td><%= attachment.mimetype %></td>
<% end %>
</td>
<td><%= link_to 'Show', project %></td>
<td><%= link_to 'Edit', edit_project_path(project) %></td>
<td><%= link_to 'Destroy', project, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
пробую делать похожее для show:
app/controllers/projects_controller.rb
def show
@project = Project.find(params[:id])
@attachment = Attachment.find(params[]) - нет понимания как найти attachments принадлежащие к project с конкретным id. пробовал (params[:project_id])
end
app/views/projects/show.html.erb
<p><%=
@project.name %></p>
<p><%=
@project.info %></p>
<p><%=
@project.attachment.name %></p>
<p><%= project.attachment.url %></p> - пробовал так и пробовал
@project.attachment.url,
<p><%= project.attachment.size %></p>
<p><%= project.attachment.mimetype %></p>
<%= link_to 'Edit', edit_project_path(
@project) %> |
<%= link_to 'Back', projects_path %>
Слабо понимаю как при связях моделей оперировать двумя моделями сразу
Посоветуйте решение этой проблемы, и куда копать, чтобы такие вопросы отпали. В мануалах обычно сразу разбирается конкретный пример и такие вопросы не рассматриваются (типа само собой разумеющееся).