首先,我不是母语,而是在三天前开始使用rails。对不起我的错误。 Formtastic让我发疯。我有三个表:用户,注释,接收者:
class User < ActiveRecord::Base
has_many :receivers
has_many :notes, :through => :receivers
attr_accessible :id, :email, :password, :password_confirmation, :remember_me
class Note < ActiveRecord::Base
has_many :receivers
has_many :users, :through => :receivers
attr_accessible :id, :text, :user_id
accepts_nested_attributes_for :receivers
class Receiver < ActiveRecord::Base
belongs_to :user
belongs_to :note
attr_accessible :user_id, :note_id, :note_attributes
accepts_nested_attributes_for :user
accepts_nested_attributes_for :note
这是我的形式:
<%= semantic_form_for @note do |form| %>
<%= form.inputs do %>
<%= form.input :text %>
<%= form.input :user_id, :as => :check_boxes, :collection => User.find(:all, :conditions => ["id != ?", current_user.id], :order => 'id').collect{|u| [u.email, u.id]} %>
<% end %>
<%= form.buttons %>
<% end %>
现在我想创建一个可以有多个接收器的新音符。不幸的是,即使我选择了接收器,也只创建了音符,但接收器表中没有声明。有人能帮帮我吗?
这里是我的notes_controller:
@note = Note.new(params[:note])
答案 0 :(得分:0)
使用logger.info打印参数[:note]并检查从表单传递的所有参数,还可以尝试在注释模型中添加code
reciever_ids code
作为attr_accessible
答案 1 :(得分:0)
在视图模型中,您使用的是attr_accessible,它不会保存任何不在attr_accessible中的字段,如receive_attributes,它们在显示嵌套表单时来自表单。所以你必须将receiver_attributes添加到attr_accessible列表。你可能想对User和Receiver这样做(如果你也有嵌套表单),也有attr_accessible
attr_accessible :id, :text, :user_id, :receiver_attributes
在notes_controller的新操作中,您需要使用类似
的构建方法@note.build_receiver
然后在表单中,您需要编写代码以显示接收器中的字段。
<%= semantic_form_for @note do |form| %>
<%= form.inputs do %>
<%= form.input :text %>
<%= form.input :user_id, :as => :check_boxes, :collection => User.find(:all, :conditions => ["id != ?", current_user.id], :order => 'id').collect{|u| [u.email, u.id]} %>
<% end %>
<%=f.semantic_fields_for :receiver_attributes, @note.receiver do|receiver| %>
<!-- Add receiver related input here using the receiver block variable like receiver.input -->
<% end %>
<%= form.buttons %>
&lt;%end%&gt;