帮助Formtastic

时间:2011-06-30 22:31:31

标签: ruby-on-rails many-to-many formtastic

首先,我不是母语,而是在三天前开始使用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])

2 个答案:

答案 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;