У меня возникла проблема с тем, что я новичок в ROR и хочу сохранить некоторые изображения для организации, используя атрибуты гнезда, или для простоты просто String, чтобы попробовать вложенные сохранение атрибутов в базе данных, но на самом деле оно не сохраняется.Вложенные атрибуты не сохраняются в базе данных на Rails 5
Организация Модель
class Organization < ApplicationRecord
has_secure_password
has_many :needs, dependent: :destroy
has_many :org_images, dependent: :destroy
has_many :stringas, dependent: :destroy
accepts_nested_attributes_for :org_images, :reject_if => lambda { |t| t['org_image'].blank? }
accepts_nested_attributes_for :stringas, :reject_if => lambda { |t| t['stringa'].blank? }
Схема
create_table "org_images", force: :cascade do |t|
t.string "caption"
t.integer "organization_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "photo_file_name"
t.string "photo_content_type"
t.integer "photo_file_size"
t.datetime "photo_updated_at"
end
create_table "stringas", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "organization_id"
end
Организация Контроллер
def new
@organization = Organization.new
3.times {@organization.org_images.build}
@organization.stringas.build # added this
end
def organization_params
params.require(:organization).permit(:org_name, :email, :password, :info,:image, :website_URL, :contacts, :logo_url , :password_confirmation ,stringas_attributes:[:name,:id,:organization_id,:created_at,:updated_at] ,org_images_attributes: [:id,:organization_id,:caption, :photo_file_name, :photo_content_type,:photo_file_size,:photo_updated_at])
конец Форма организации
<div class= "field">
<% if builder.object.new_record? %>
<p>
<%= builder.label :caption, "Image Caption" %>
<%= builder.text_field :caption %>
</p>
<p>
<%= builder.label :photo, "Image File" %>
<%= builder.file_field :photo %>
</p>
<% end %>
<% if builder.object.new_record? %>
<p>
<%= builder.label :name %>
<%= builder.text_field :name%>
</p>
<% end %>
<% end %>
Stringa и org_image Модели
class OrgImage < ApplicationRecord
belongs_to :organization
has_attached_file :photo, :styles => { :small => "150x150>", :large => "320x240>" }
validates_attachment_presence :photo
validates_attachment_size :photo, :less_than => 5.megabytes
end
class Stringa < ApplicationRecord
belongs_to :organization
end
Организация cotroller создать
def create
@organization = Organization.new(organization_params)
respond_to do |format|
if @organization.save
session[:organization_id][email protected]
format.html { redirect_to @organization, notice: 'Organization was successfully created.' }
format.json { render :show, status: :created, location: @organization }
else
format.html { render :new }
format.json { render json: @organization.errors, status: :unprocessable_entity }
end
end
git repository КОНЕЦ Спасибо за вашу помощь
Можете ли вы показать нам журналы или любые ошибки, если они придут, чтобы мы могли понять, почему они не сохраняются. –
, к сожалению, он сохраняет организацию обычно со всеми ее атрибутами, но не сохраняет вложенные в своих таблицах (в браузере БД я вижу запись организации, но таблицы вложенных атрибутов пустые, я буду очень благодарен если вы просто показали мне простой пример, который обычно использует вложенную модель. –
, когда я пытался писать accepts_nested_attributes_for: stringas only not accepts_nested_attributes_for: stringas,: reject_if => lambda {| t | t ['stringa']. blank?} и заполнил форму организации снова, он дал мне сообщение об ошибке «Организация Stringas должна существовать». Однако я ввел имя поля stringas (вложенную модель) в форме организации, поэтому я думаю, что он возвращается пустым из формы! –