Rails продолжает показывать «UnkownAttributeError» при попытке вставить в две таблицы с одного контроллера - PullRequest
1 голос
/ 07 июня 2019

То, что я хотел сделать, это получить

last_insert_id

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

ActiveModel :: UnknownAttributeError (неизвестный атрибут 'content' для MessagePicture.): # Копируется из консоли неизвестный атрибут 'content' для MessagePicture. # Скопировано из браузера и выделено это число

@ message = current_user.messages.build.message_pictures.build (message_params)

Это

новые и создаваемые методы класса Message_controller

def new
    @message = current_user.messages.build if logged_in?
    @reciever = User.find_by(params[:id])
  end



def create
    #@msg = Message.new(user_params)
    @message = current_user.messages.build.message_pictures.build(message_params)

    if @message.save
      if @message[:picture].present?
        # Send this to the message model for insertion with the @message_id and from the picture model, insert it to the
        add_msg_pic(msg = [@message.id,@message[:msg_img_url]])
      end

      flash[:success] = "Message sent"
      redirect_to messages_path
    else
      flash.now[:danger] = "Message not sent"
      render 'new'
    end
  end

Это

метод message_params

def message_params
  params.require(:message).permit(:content, :receiver, :sender, :archive, message_pictures_attributes:[:msg_img_url, :message_id])
end

Это

Класс сообщения (модель) метод add_msg_pic

def add_msg_pic(msg)
    msg.message_pictures.each.do |m|
    m.message.id = nil
    message_pictures << m
end

This is the view page
<h1>Compose a new message</h1>
<div class="row">
    <div class="col-md-6 col-md-offset-3">
        <%= form_for(@message, html: { multipart: true }) do |f| %>

          <%= render 'shared/error_messages', object: @message %>

          <%= f.label :content %>
          <%= f.hidden_field :receiver, value: @reciever %>
          <%= f.hidden_field :sender, value: current_user.id %>
          <%= f.text_area :content, size:"20x15" %>
          <%= f.submit "Send message", class: "btn btn-primary" %> 

          <span class="picture">
            <%= f.fields_for :message_pictures do |mp| %>
              <%= mp.file_field :msg_img_url, accept: 'image/jpeg,image/gif,image/png' %>
            <% end %>   
          </span>
        <% end %>
        <%= button_to "Save message", archive_messages_path %>
    </div>
</div>

1 Ответ

0 голосов
/ 07 июня 2019

Предположим, Message выглядит следующим образом

class Message < ApplicationRecord
  has_many :message_pictures
  accepts_nested_attributes_for :message_pictures
end

Тогда это:

@message = current_user.messages.build.message_pictures.build(message_params)

на самом деле должно быть

@message = current_user.messages.build(message_params) 

Прямо сейчас вы проходите всеэти атрибуты для нового MessagePicture, но на самом деле вы должны передавать некоторые в Message, а некоторые в MessagePicture.

accepts_nested_attributes_for отрежет единицы для message_pictures через message_pictures_attributes и создаст оба предмета для вас.

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