2014-02-27 71 views
0

我想使用选择标签来保存父项中的多个嵌套子项。导轨 - 多个嵌套属性

这是我在看

Couldn't find all UserLocations with IDs (1, 2) (found 0 results, but was looking for 2) 

错误我有Rails 4Devise下以下设置:

用户

class User < ActiveRecord::Base 
    has_many :user_locations 

    accepts_nested_attributes_for :user_locations, :allow_destroy => true 
end 

用户位置(罗阳离子用户有)

class UserLocation < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :location 
end 

位置(位置预设列表中,用户可以在选择)

class Location < ActiveRecord::Base 
    has_many :user_locations 
    has_many :users, through: :user_locations 
end 

然而,试图保存选定UserLocations时,他们将不会被保存。

Rails的选择标记(您可以选择多个项目)

<%= f.select :user_location_ids, options_for_select(Location.all.collect { |l| [ l.name, l.id ] }, @user.user_locations.collect{ |l| l.id }), {}, { multiple: true } %> 

我已经把user_location_idsapplication_controller作为user_location_ids: []

干杯

回答

0

解决

的soluti on将覆盖多个嵌套模型的默认设置方法model_ids=(value)。做而不是使用模型的复数,例如, models_ids=(value),因为是错的

def user_location_ids=(value) 
    for slot in value do 
    unless slot == "" 
     location = Location.find_by(id: slot.to_i) 
     unless location.nil? 
     self.user_locations << UserLocation.create(user_id: self.id, location_id: location.id) 
     end 
    end 
    end 
end