Rails使用连接表

时间:2016-08-23 07:40:11

标签: mysql ruby-on-rails arrays ruby mysql-workbench

使用has_many :through关系的rails 4应用程序

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将存储在具有相同行的不同行中{ {1}}。

我得到的回应如下:

business_type_id

由于

1 个答案:

答案 0 :(得分: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)