我仍在努力编写控制器和实际表单,以便能够使用可选模型将一个表单嵌套到另一个表单中?
我有许多联系人的消息
提交邮件时,我想选择添加联系人。
我以此为例:
= simple_form_for Message.new, :remote => true do |f|
#message_form
= f.error_messages
%p
= f.input :account_name, :url => autocomplete_account_name_messages_path, :size => 40, :as => :autocomplete
%p
= f.input :topic, :required => true,
:input_html => {:size => 30}
#add_contact_btn
= link_to "Add Contact"
#contact_form
= f.simple_fields_for :contactd do |fc|
= fc.input :email
= fc.input :first_name
= fc.input :last_name
= f.submit 'Give'
= f.submit 'Request'
对于Message.rb模型,我有以下内容:
has_many :contacts
accepts_nested_attributes_for :contacts, :reject_if =>:all_blank
注意:当我使用时:simple_fields_for中的联系人不起作用,所以它是单数。但accept_nested_attributess_for的反面。
在我的消息创建控制器中,我包含了message.contacts.build
但是现在我仍然没有产生任何联系。
以下是我从google chrome中传递的表单数据:
message%5Baccount_name%5D:McKesson
message%5Btopic%5D:testing a contact
message%5Bbody%5D:testing this
sender_id:
receiver_id:23
message%5Bcontacts%5D%5Bemail%5D:888@gmail.com
message%5Bcontacts%5D%5Bfirst_name%5D:Ang
message%5Bcontacts%5D%5Blast_name%5D:Name
答案 0 :(得分:8)
正确的方法名称是simple_fields_for
(注意复数)
此外,您需要让f.
在simple_form对象
答案 1 :(得分:4)
答案 2 :(得分:0)
在我的消息创建控制器中,我包含了message.contacts.build
但是现在我仍然没有产生任何联系。
确保您在Message.rb模型中添加了接受属性的能力。
class Message < ActiveRecord::Base
attr_accessible :contacts_attributes
has_many :contacts
accepts_nested_attributes_for :contacts
我知道它没有完全回答你的问题,但可能就是这样。当涉及到我的项目时,如果我没有包含:contacts_attributes
,它将返回nil,在我的情况下它会处理产品。希望这有帮助,即使我现在还没有使用简单的形式!
答案 3 :(得分:0)
我遇到了使用嵌套表单的类似问题。正如JustinRoR所建议的那样,你需要定义 attr_accessible:contacts_attributes。
你应该能够在ruby控制台中测试哈希(我不确定你是否尝试过这个)。我建议你打印params [:message]并使用它来从控制台创建消息,如Message.new(params [:message])。 (注意参数[:message]是打印params [:message]哈希所得到的。
一旦它在控制台中运行,它应该像魅力一样工作