【发布时间】:2015-09-30 07:26:36
【问题描述】:
我尝试通过表单为对话创建新消息。
class Conversation < ActiveRecord::Base
has_many :messages
accepts_nested_attributes_for :messages
到目前为止,我正在使用部分来创建新消息_new_message.html.erb:
<div id="message_dialog">
<%= simple_form_for [:front, @conversation] do |f| %>
<%= f.input :challenge_id, as: :hidden, input_html: { value: @conversation.challenge.id } %>
<%= f.simple_fields_for :messages do |m| %>
<%= m.input :subject %>
<%= m.input :text, as: :text %>
<%= m.input :recipient_id, as: :hidden, input_html: { value: @conversation.challenge.user_id } %>
<%= m.input :sender_id, as: :hidden, input_html: { value: current_user.id } %>
<% end %>
<%= f.button :submit %>
<% end %>
</div>
在我定义的 ConversationsController 的显示动作中:
@conversation = Conversation.find(params[:id])
@conversation.messages.build
这适用于为新对话创建新消息。
但是,当我尝试为已经有其他消息的对话创建新消息时,表单助手会为每个属于该对话的消息创建一个编辑字段
创建新的嵌套资源的最佳方法是什么?
最好使用相同的部分来为新对话创建新消息,并为已经有其他消息的现有对话创建新消息。
【问题讨论】:
-
发布您的
new控制器代码,以便我更好地了解您的设置 -
您可以在
new.html.erb和edit.html.erb中调用该部分,并在控制器中相应地设置@conversation。 -
@WesFoster 我没有消息#new 控制器,因为我想将新消息的表单附加到对话#show 操作的底部。
-
你能发布你的
conversations_controller吗? -
听起来
@conversation已分配给现有记录
标签: ruby-on-rails ruby ruby-on-rails-4 nested-forms