2013-08-06 5 views
0

У меня есть следующиеформы не сохранение нескольких идентификаторов

class Portfolio < ActiveRecord::Base 
belongs_to :sector 

attr_accessible :overview, :title, :sector_id 

end 

class Sector < ActiveRecord::Base 
has_many :portfolios 
attr_accessible :name 
end 

У меня есть collection_select внутри моей формы для создания нового портфеля, как

<%= f.collection_select(:sector_id, Sector.all, :id, :name, {:prompt => "Please Select a Sector"}, {:multiple => true}) %> 

Когда я отправить форму он сохраняет все другие атрибуты, но no Sector_id не передается и не сохраняется.

Я хочу, чтобы иметь возможность сохранить несколько идентификаторов для сектора паров

, что я мог не быть?

Нужно ли мне использовать accepts_nested_attributes_for: секторы в моей модели портфолио?

+0

'{: multiple => true}' создает проблему, я уверен, что вы можете сохранить один 'sector_id' без использования. – Salil

+0

Я хочу сохранить несколько идентификаторов, хотя любые идеи? – Richlewis

+0

Изменить вашу модель автомобиля? У вас есть только один идентификатор сектора. –

ответ

1

Рекомендуется использование в вашем случае:

модели портфель

class Portofolio < ActiveRecord::Base 
    attr_accessible :sector_ids, .... 
    has_many :portofolio_sectors 
    has_many :sectors, through: :portofolio_sectors 
end 

в форме

<%= f.collection_select :sector_ids, Sector.order(:name), :id, :name, {:prompt => "Please Select a Sector"}, {multiple:true} %> 

portofolio_sectors модели

class PortofolioSector < ActiveRecord::Base 
    belongs_to :portofolio 
    belongs_to :sector 
end 

модель сектора

class Sector < ActiveRecord::Base 
    has_many :portofolio_sectors 
    has_many :portofolios, through: :portofolio_sectors 
end 

http://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many

, и это может быть интересно для вас, должны быть про счет:

http://railscasts.com/episodes/258-token-fields-revised

обновление

, когда вы будете добавлять sectors к portofoliomultiple select использования, sector_ids будет заполняться с array идентификаторов, которые принадлежат Sector, а на рельсы представить прочтет эту param[:sector_ids], что будет так: [2,5,17,8] и создаст 4 (в этом случай 4) portofolio_sectors записи с sector_id = 2, 5, 17, 8 и для каждого из этих porofolio_id будет ток portofolio.id напр: 2. В результате вы будете иметь:

portofolio_sectors стол:

id portofolio_id  sector_id 
1    2    2 
2    2    5 
3    2   17 
4    2    8 

Как создать portofolio_sectors из sector_ids вы также можете увидеть эту ссылку: http://railscasts.com/episodes/382-tagging, см. Метод tag_lis.

В связи вы можете получить доступ к секторам с: portofolio.sectors, это будет array из sectors, который принадлежит к этому portofolio.

+0

еще раз спасибо .. поэтому, когда я создаю новый портфолио, модель Portfolio_Sector обновляется с помощью параметров sector_id и portfolio_id – Richlewis

+0

при создании portofolio, portofolio_sector остается нетронутым. Когда вы создаете сектор, portofolio_sector остается неповрежденным и ТОЛЬКО при добавлении секторов в portofolio новые строки в таблице portofolio_sectors. Я уточню ответ. – rmagnum2002

+0

ах, спасибо, не предположите, что вы можете дать мне несколько указателей на доступ к этим в представлении, не могли бы вы? – Richlewis

Смежные вопросы