2016-04-04 5 views
0

, как решить эту ошибку:Ошибки с collection_check_boxes

SQLite3 :: SQLException: нет такой колонки: functionalities.profile_id: SELECT "функциональных" * FROM "функциональных", где "функциональность" "profile_id" = 1..

Это мой _form.html.erb

<h3>Add functionalities</h3> 
    <% if current_user.admin? %> 
    <%= f.collection_check_boxes :functionality_ids, Functionality.all, :id, :description %> 
    <% else %> 
    <%= f.collection_check_boxes :functionality_ids, Functionality.where(profile_id: current_user.profile.id), :id, :description %> 
    <% end %> 

Profile.rb

has_many :users 
    has_many :profile_functionalities 
    has_many :functionalities, through: :profile_functionalities 
    belongs_to :manager 
    belongs_to :agent 

Functionality.rb

# Nothing here for now 

ProfileFunctionality.rb

belongs_to :profile 
    belongs_to :functionality 

Я думаю, что мне нужно сделать присоединиться, потому что ошибка в том, когда я на еще.

+1

Почему не просто 'current_user.profile.functionality' вместо' Functionality.where (profile_id: current_user.profile.id) '? Поскольку вы ничего не писали для модели 'Functionality', трудно определить, что это отношение работает, но я бы предположил, что у нее нет' profile_id', так как это то, для чего предназначена ваша таблица соединений 'ProfileFunctionality'. – engineersmnky

ответ

1

У вас есть отношение «многие ко многим», поэтому функциональность не имеет колонки profile_id. Вам нужно найти профиль, а затем получить функциональные возможности, связанные с ним:

Profile.find(current_user.profile_id).functionalities 

Если current_user сам объект ActiveRecord, вы можете просто сделать:

current_user.profile.functionalities 

В общем, вы не хочу специально ссылаться на столбцы * _id, а вместо этого рельсы выполняют перевод для вас.