我正在尝试保存嵌套表单,但不确定如何使其正常工作。 无法使用'body'保存private_message。
@private_message_topic.private_messages.build
它使用private_message_topic_id设置构建private_message。不知道如何添加params [: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
答案 0 :(得分:0)
将控制器中的current_user.sent_messages.build
和current_user.sent_messages.new
方法中的new
更改为create
。
在您的表单中,由于您已经在控制器中构建它,因此无需执行private_message.new
。表单应如下所示:
<强> private_message_topics / _form 强>
= 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
另外,我认为没有必要在表单声明中指定url和方法。 Rails自动设置正确的URL和方法。