【发布时间】:2014-11-19 14:51:32
【问题描述】:
我正在尝试构建一个表格来处理某个活动已设置为具有以下模型关联的位置和类别:
class Campaign < ActiveRecord::Base
has_many :campaign_category_metro_bids, dependent: :destroy
has_many :metros, through: :campaign_category_metro_bids
has_many :categories, through: :campaign_category_metro_bids
end
class Metro < ActiveRecord::Base
has_many :campaign_category_metro_bids
has_many :campaigns, through: :campaign_category_metro_bids
has_many :categories, through: :campaign_category_metro_bids
end
class Category < ActiveRecord::Base
has_many :campaign_category_metro_bids
has_many :campaigns, through: :campaign_category_metro_bids
has_many :metros, through: :campaign_category_metro_bids
end
class CampaignCategoryMetroBid < ActiveRecord::Base
belongs_to :campaign
belongs_to :category
belongs_to :metro
end
当尝试创建一个活动以选择两个不同的城市和类别时,其中一个参数的 id 的结果为 NULL:
广告系列创建代码:
def new
if signed_in?
# create new campaign
@user = User.find(params[:id])
@campaign = @user.campaigns.new
else
redirect_to signin_path
end
end
def create
@campaign = User.find(params["campaign"]["user_id"]).campaigns.build(campaign_params)
if @campaign.save
flash[:success] = "Campaign created!"
redirect_to current_user
else
render 'new'
end
end
更新 创建活动的视图对 Category 和 Metro 使用两个单独的 collection_select:
<%= f.collection_select :category_ids, Category.all, :id, :display_category, {}, {multiple: true} %>
和
<%= f.collection_select :metro_ids, Metro.all, :id, :full_name, {}, {multiple: true} %>
campaigns_params:
def campaign_params
params.require(:campaign).permit(:name, :campaign_category_metro_bid_id,
:metro_ids => [], :category_ids => [])
end
有没有更好的方法来允许创建 3 表关系,因为我正在尝试?
或在选择时链接Category 和Metro 模型的方法,以便在创建活动时生成的表格如下所示:
【问题讨论】:
-
@AlexisRabagoCarvajal 目前还没有答案。我添加了 UPDATED 以进行更多说明
-
您的设置对我来说看起来不错。我知道这已经很老了,但是你问上面的代码有什么问题?
-
你能解释一下你想要完成的事情吗?具体来说,在我看来,类别仅通过广告系列与都市圈相关——对吗?
标签: ruby-on-rails activerecord associations data-modeling model-associations