0

所以我有一个Conversation模型,它has_many messages。创建对话时,我正在尝试创建新消息。这是我的ConversationsController

class ConversationsController < ApplicationController
  before_filter :authenticate_user!
  def new
    recipient = User.find(params[:user])
    @conversation = Conversation.new(from: current_user, to: recipient)
    @conversation.messages.build(from: current_user, to: recipient)
  end

  def create
    @conversation = Conversation.create(params[:conversation])
    redirect_to @conversation
  end
end

这是我的表格(conversations/new.html.erb):

<%= form_for @conversation do |f| %>
  <%= f.fields_for :messages do |g| %>
    <%= g.label :subject %>
    <%= g.text_field :subject %>
    <%= g.label :content %>
    <%= g.text_field :content %>
  <% end %>
  <%= f.submit "Send" %>
<% end %>

问题:当我提交表单时,对话的消息被保存,但我指定为参数的to和字段没有保存(它们为零)。但是,在此表单中填写的和字段保存得很好。frombuildsubjectcontent

我已经进行了一些挖掘......如果我在动作中或在 中执行putson ,则消息似乎具有and 。只有当消息到达操作时,这些字段才会消失。@conversation.messagesnewnew.html.erbtofromcreate

4

1 回答 1

0

更新:

class ConversationsController < ApplicationController
  before_filter :authenticate_user!
  def new
    recipient = User.find(params[:user])
    @conversation = Conversation.new(to: recipient)
    @conversation.messages.build
  end

  def create
    @conversation = current_user.conversations.build(params[:conversation])

    # Set all the attributes for conversation and messages which
    # should not be left up to the user.
    @conversation.to = current_user
    @conversation.messages.each do |message|
      message.to = @conversation.to
      message.from = @conversation.from
    end

    redirect_to @conversation
  end
end

<%= form_for @conversation do |f| %>
  <%= f.hidden_field :recipient %>
  <%= f.fields_for :messages do |g| %>
    <%= g.label :subject %>
    <%= g.text_field :subject %>
    <%= g.label :content %>
    <%= g.text_field :content %>
  <% end %>
  <%= f.submit "Send" %>
<% end %>

您可能仍想在对话模型中验证收件人。

于 2012-08-20T00:15:12.190 回答