2016-08-23 40 views
1

在轨道4应用随着has_many :through关系不同的行与Rails的存储阵列参数连接表

city.rb

has_many :business_type_cities 
has_many :business_types, :through => :business_type_cities 

business_type.rb

has_many :business_type_cities 
has_many :cities, :through => :business_type_cities 

businesstypecity .rb

belongs_to :buness_types 
belongs_to :cities 

business_types_controller.rb

def create 
    if business_type.save 
    BusinessTypeCity.create :business_type_id => business_type.id,  :city_id => params[:cities] 
    flash[:notice] = 'Business Type Created Successfully!' 
    redirect_to admin_business_types_path 
    else 
    flash[:error] = business_type.errors.full_messages.join(', ') 
    end 
end 

但这里city_idarray,我想存储business_type_idcity_id一行,其他city_id将不同行中存储与同business_type_id

响应我得到的是以下几点:

"business_type"=>{"name"=>"test", "review_type"=>"review_with_rating"}, "cities"=>["293", "1091", "1200"], "commit"=>"Create Business Type" 

感谢

+0

简单,我需要迭代PARAMS [:城市]与每个做。虽然如果你有更好的答案,那么对此感兴趣。感谢您的时间。 –

回答

1

通常的做法是,你在评论所说的东西。以下是我通常所做的

existing_city_ids = business_type.city_ids 
business_type.city_ids = existing_city_ids | params[:cities].map(&:to_i) 

首先获取当前业务类型的所有现有城市id。然后结合新的,使用||以避免重复,并将params[:cities]映射到int以匹配business_type.city_ids (returns an array of int)