2013-11-26 57 views
0

我需要在这种情况下建立合作关系,帮助:下嵌套表格嵌套在Rails的3.2

我有3种型号:CampaignCampaignPostUser

我想实现的东西像FF:

  1. 运动有许多campaign_posts
  2. 用户每有征战
  3. 营许多CampaignPost aignPost属于用户
  4. CampaignPost属于广告活动

样机:http://d.pr/i/uXq6

在创建一个全新的活动,CURRENT_USER可以添加CampaignPost成竞选,并最终CampaignPost将用户进行分组。并能够计算每个用户的职位#在一个竞选

首先我所做的是在用户模式,我窝CampaignPost:

user.rb:

# Campaign Posts 
    has_many :campaign_posts 
    accepts_nested_attributes_for :campaign_posts, :allow_destroy => true, 
           :reject_if => lambda { |a| a[:post].blank? } 

campaign_post.rb

class CampaignPost < ActiveRecord::Base 
    attr_accessible :campaign_id, :post, :user_id 

    belongs_to :user 
    belongs_to :campaign 
end 

campaign.rb

# Users 
    has_and_belongs_to_many :users 

    has_many :campaign_posts 

我的编辑形式:

= simple_form_for(@campaign, remote: true) do |f| 
    .admin_tracker_wrapper 
    .new_campaign_header_bg 
     .new_campaign_header 
     = image_tag('/assets/admin_wrench_03.png') 
     %b= "Admin" 
    .new_campaign_bg#new_campaign_bg1 
     .inputs#inputs_new 
     = f.input :name, label: false, placeholder: "Enter campaign name.." 
     = f.text_area :objective, placeholder: "Enter objective.." 

     = submit_tag "Edit", class:"edit_campaign_btn" 

    - @campaign.campaign_posts.build 
    .new_campaign_bg#new_campaign_bg2 
     - @campaign.users.each do |user| 
     .post_header 
      .row-fluid 
      .span1 
       .circle 
       - if user.photo_url.blank? 
        = image_tag 'avatar.png' 
       - else 
        = image_tag user.photo_url, :alt=>'' 
      .span2.post_header_full_name 
       %span.full_name= user.full_name 
       %br 
       - if @campaign.campaign_posts.count <= 1 
       %span.posts_count= "#{@campaign.campaign_posts.count} Post" 
       - else 
       %span.posts_count= "#{@campaign.campaign_posts.count} Posts" 
      .span1.pull-right 
       %a{href: "#", class:"title"} &nbsp; 
     %hr 
     %br 
     #d-form 
      - @campaign.campaign_posts.each.with_index(1) do |campaign,index| 
      /= campaign.post 
      .inputs#inputs_edit 
       = user.fields_for :campaign_posts, campaign do |c| 
       %span.post_index= "#{index} . " 
       &nbsp; 
       = c.text_field :post 
       = submit_tag "Enter", class:"enter_campaign_btn" 
       %hr 

在我的形式,我已经@campaign作为父窗体,然后我窝用户通过@campaign.users, 然后有fields_for准备campaign_posts

fields_forcampaign_posts麦凯纳没有表现出来,我认为关系或形式本身有问题。

任何解决方法将不胜感激。

回答

0

我认为你需要检查fields_for的工作方式。在railscasts网站上有一些非常不错的教程:http://railscasts.com/episodes/196-nested-model-form-revised

代码user.fields_for应该引发一个错误,据我所知。 fields_for是FormBuilder上的一种方法,不应出现在用户模型中。

因此,当您在@campaign的上下文中进行编辑时(这是您在表单中开始的内容)。您需要确保所有内容都映射到该广告系列。 IE你需要在广告系列上有accepts_nested_attributes_for,而不是在用户等上。

0

我认为,问题是这一行:

- @campaign.campaign_posts.build 

建设将实例化一个(或多个)类(CampaignPost)的情况下,并返回给你打个电话,但添加它们到campaign_posts集合。视图假定它们被添加到集合中。

我会考虑使用控制器检索campaign_posts的集合作为实例变量,然后在视图中使用它。

@campaign_posts = @campaign.campaign_posts.count.zero? ? [@campaign.campaign_posts.build] : @campaign.campaign_posts 

而且,是@ campaign.campaign_posts.each.with_index(1)一个错字(@ campaign.campaign_posts.each_with_index)?