Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails中的嵌套形式_Ruby On Rails_Ruby On Rails 4_Simple Form_Nested Attributes - Fatal编程技术网

Ruby on rails rails中的嵌套形式

Ruby on rails rails中的嵌套形式,ruby-on-rails,ruby-on-rails-4,simple-form,nested-attributes,Ruby On Rails,Ruby On Rails 4,Simple Form,Nested Attributes,我正在尝试保存嵌套表单,但不确定如何使其工作。 无法保存带有“body”的私人消息 @private_message_topic.private_messages.build 它使用private_message_topic_id集构建private_消息。但不确定如何添加参数[:body] 希望你能帮助我。谢谢 class PrivateMessageTopic < ActiveRecord::Base belongs_to :recipient, class_name: "Use

我正在尝试保存嵌套表单,但不确定如何使其工作。 无法保存带有“body”的私人消息

@private_message_topic.private_messages.build
它使用private_message_topic_id集构建private_消息。但不确定如何添加参数[:body]

希望你能帮助我。谢谢

class PrivateMessageTopic < ActiveRecord::Base
  belongs_to :recipient, class_name: "User", foreign_key: "recipient_id"
  belongs_to :sender, class_name: "User", foreign_key: "sender_id"

  has_many :private_messages
  accepts_nested_attributes_for :private_messages
end


class PrivateMessage < ActiveRecord::Base
  belongs_to :recipient, class_name: "User", foreign_key: "recipient_id"
  belongs_to :sender, class_name: "User", foreign_key: "sender_id"
  belongs_to :private_message_topic
end


class PrivateMessageTopicsController < ApplicationController
  before_action :find_user
  before_action :find_private_message, only: [:show]

  def index
  end

  def show
  end

  def new
    @private_message_topic = current_user.sent_messages.build
    @private_message_topic.private_messages.build
  end

  def create
    @private_message_topic = current_user.sent_messages.build(private_message_topic_params)
    @private_message_topic.recipient = @user

    if @private_message_topic.save
      #Todo
    else
      redirect_to action: :new
      flash.alert = "oops!"
    end
  end

  def inbox
    @inbox_messages = @user.inbox_messages
  end

  def sent
    @sent_messages = @user.sent_messages
  end

  private
    def find_user
      @user = User.find(params[:user_id])
    end

    def find_private_message
      @private_message = PrivateMessageTopic.find(params[:id])
    end

    def private_message_topic_params
      params.require(:private_message_topic).permit(:title, private_messages_attributes: [:body])
    end
end


private_message_topics/_form

= simple_form_for @private_message_topic, url: user_private_message_topics_path, method: :post do |form|
  = form.input :title

  = form.simple_fields_for @private_message_topic.private_messages.new do |form|
    = form.input :body

  = form.submit
在控制器的new和create方法中将current_user.sent_messages.build更改为current_user.sent_messages.new

在您的表单中,不需要执行private_message.new,因为您已经在控制器中构建了它。表单应如下所示:

私人信息主题/表格


另外,我认为没有必要在表单声明中指定url和方法。Rails会自动设置正确的url和方法

请发布您的用户模型@SanI建议使用嵌套的_表单或cocoon gem。它仍然不会创建与此私有_消息相关联的私有_消息。您可以共享发布到控制器的参数散列。啊,现在我看到了问题。您是否使用宝石作为嵌套形式,如嵌套形式或cocoon?
= simple_form_for @private_message_topic, url: user_private_message_topics_path, method: :post do |form|
  = form.input :title

  = form.fields_for :private_messages do |f|
    = f.input :body

  = form.submit