如何在父窗体中向父级添加多个关联对象?

时间:2014-02-07 18:50:47

标签: ruby-on-rails ruby-on-rails-4

我在Rails上4.我正在制作订阅模式,用户在订阅中构建他们想要的产品。我在这里有很多模型,但我觉得在我的问题中很重要的是Product模型,Subscription模型和SubscriptionItem连接模型。产品在数据库中设置,用户可以选择他们想要添加到订阅的数量,因此可以选择连接模型。

我的产品.rb

class Product < ActiveRecord::Base
    has_many :subscription_items
    has_many :subscriptions, through: :subscription_items
end

我的Subscription.rb

class Subscription < ActiveRecord::Base
  belongs_to :user
  belongs_to :plan
  has_many :subscription_items
  has_many :products, through: :subscription_items
  validates :name, presence: true
  accepts_nested_attributes_for :subscription_items
end

我的SubscriptionItem加入

class SubscriptionItem < ActiveRecord::Base
  belongs_to :subscription
  belongs_to :product
end

在我的新订阅视图中,我希望用户只需选中复选框即可选择他们想要的产品...

我目前有......

    <div class="form-group">
        <h3>Choose your items</h3>
        <div class="products">
            <% @products.each do |product| %>
                  <%= f.fields_for :subscription_items do |p| %>
                    <%= p.label :product_id, product.name.titleize %>
                    <%= p.check_box :product_id, product.id %>
                  <%= end %>
            <% end %>
        </div>
    </div>

我的Subscriptions控制器中的新方法和创建方法

def new
    @plans = Plan.all
    @subscription = Subscription.new
    @products = Product.all
    @subscription.subscription_items.build
end

def create
    @user = User.find(params[:user_id])
    @subscription = @user.subscriptions.build(sub_params)
    if @subscription.save
        flash[:notice] = "Your subscription has been created."
        redirect_to @user
    else
        flash[:alert] = "There was a problem and your subscription could not be created."
        render "new"
    end
  end

我强烈的参与......

def sub_params    
    params.require(:subscription).permit(:name, :plan_id, subscription_item_attributes: [:id, :product_id])
end

当我尝试创建订阅时,不会创建subscription_items。有什么建议吗?

0 个答案:

没有答案