代码之家  ›  专栏  ›  技术社区  ›  gbenga wale

Rails在试图从一个控制器插入两个表时,一直显示“UnkownAttributeError”

  •  0
  • gbenga wale  · 技术社区  · 5 年前

    我想做的是得到

    最后插入id

    然后将其插入另一个表中,但这样做时会出现此错误(我不知道这样做是否正确)

    ActiveModel::UnknownAttributeError(MessagePicture的未知属性'content'):#这是从控制台复制的 MessagePicture的未知属性“内容”。#从浏览器中复制,并突出显示此数字

    @message=当前用户。信息。建筑留言和图片。生成(消息参数)

    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
    

    这是

    消息参数方法

    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>
    
    0 回复  |  直到 5 年前
        1
  •  0
  •   engineersmnky    5 年前

    假设 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 但你真的应该把一些传给 消息 还有一些 信息图片 .

    这个 accepts_nested_attributes_for 我会为你切下这些 message_pictures 通过 message_pictures_attributes 并为您构建这两个项目。