0

我在尝试保存嵌套窗体,不确定如何使其工作。 无法使用'body'保存private_message。在导轨中嵌套窗体

@private_message_topic.private_messages.build 

它建立private_message与private_message_topic_id设置。不知道如何添加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

请张贴您的'用户'模型。 – San

+0

http://pastie.org/9351436 @San – user3303363

+0

我会推荐使用'nested_form'或'cocoon' gem。 – San

回答

0

变化current_user.sent_messages.buildcurrent_user.sent_messages.new在你的控制器都newcreate方法。

而在您的表格中,您不需要做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和方法。

+0

它仍然不会创建与此private_message_topic关联的private_message – user3303363

+0

您是否可以共享正在发布到控制器的参数哈希值? – San

+0

http://pastie.org/9351488 – user3303363