2016-09-06 4 views
0

У меня возникла проблема с тем, что я новичок в 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 КОНЕЦ Спасибо за вашу помощь

+0

Можете ли вы показать нам журналы или любые ошибки, если они придут, чтобы мы могли понять, почему они не сохраняются. –

+0

, к сожалению, он сохраняет организацию обычно со всеми ее атрибутами, но не сохраняет вложенные в своих таблицах (в браузере БД я вижу запись организации, но таблицы вложенных атрибутов пустые, я буду очень благодарен если вы просто показали мне простой пример, который обычно использует вложенную модель. –

+0

, когда я пытался писать accepts_nested_attributes_for: stringas only not accepts_nested_attributes_for: stringas,: reject_if => lambda {| t | t ['stringa']. blank?} и заполнил форму организации снова, он дал мне сообщение об ошибке «Организация Stringas должна существовать». Однако я ввел имя поля stringas (вложенную модель) в форме организации, поэтому я думаю, что он возвращается пустым из формы! –

ответ

0

кажется, что проблема заключается в неразрешенных org_images атрибутов в вашем OrganizationsController. Вы должны добавить это в ваш метод organization_parameters:

params.require(:organization).permit(... , org_images_attributes: [:photo, :caption]) 

EDIT:

Порывшись немного глубже, я узнал, что выше решение не всегда работает. На этой теме в Rails repo на GitHub есть issue. Если вы хотите найти подходящее обходное решение, которое подойдет вашим потребностям, вы должны прочитать его или проверить this ответ.

Смежные вопросы