나는 위치와 특정 캠페인은 다음과 같은 모델 협회로 설정되어있는 카테고리를 모두 처리 할 수있는 테이블을 구축하려고 시도하고있다 :레일 액티브 : 세 개의 테이블 has_many을 통해 : 협회
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
만들려고
캠페인 생성 코드 : 두 개의 서로 다른 도시 및 카테고리 결과를 선택하기위한 캠페인으로 paramters 중 하나의 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
캠페인을 만들 뷰 업데이트 등의 종류와 지하철에 대한 두 개의 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
모델을 연결하는 :
:-) 방향을 설정하는 데 도움이되기를 바랍니다? – Eric
@ 에릭 다른 정보가 필요합니까? – Sauron
예, campaign_params 메소드 : – Eric