Ruby on rails rails中的嵌套形式
我正在尝试保存嵌套表单,但不确定如何使其工作。 无法保存带有“body”的私人消息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
@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