2015-12-30 3 views
-1

Я делаю приложение в Rails 4. Я использую Simple Form для форм.Rails Simple Form Выберите из Array - полиморфные ассоциации

У меня есть модель профиля и модель организации.

Ассоциации являются:

profile.rb

has_one :organisation, as: :orgable 

organisation.rb

has_many :profiles 

В моей организации таблицы, у меня есть атрибут: org_type.

В моей форме организации, я прошу пользователей, чтобы выбрать из массива типов организации:

<%= f.input :org_type, :label => "Organisation type", collection: [ "University", "Research Organisation", "Company"] %> 

В моем профиле форме, я хочу спросить пользователей, которые уни они изучают в.

Я хочу использовать множество университетов, созданных в рамках модели организации.

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

scope :all_uni, -> { where(org_type: 'University') } 

В моем профиле форме у меня есть:

<%= f.input :institution, :label => "Graduated from" %> 

Но это только имеет текстовое поле.

Я попытался заменить эту строку попыткой сделать функцию выбора в моей форме, которая относится к области моей модели организации для all_uni. Это выглядит следующим образом:

<%= f.select(:institution, @organisation.all_uni.title.map { |value| [ value, value ] }) %> 

Это дает эту ошибку:

undefined method `all_uni' for nil:NilClass 

Я не понимаю, что значит это сообщение об ошибке, но я также не уверен, что я на правильном пути с поле выбора формы. Любые подсказки для того, где искать, чтобы это работало. Я не уверен, как начать настройку поля выбора в первую очередь?

ДРУГАЯ ПОПЫТКА:

Я также попытался использовать это в моем профиле форме:

<%= f.select(:institution, @organisation.all_uni.title) %> 

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

ДРУГАЯ ПОПЫТКА

Я нашел этот пост Rails Simple Form custom association select field

Принимая пример в этом решении, я попробовал:

<%= f.input :institution do %> 
        <%= f.select :institution, Profile.Organisation.all_uni.map{ |l| [l.title {:title => l.title.titlecase}] } %> 
        <% end %> 

Но, я получаю эту ошибку синтаксиса. Я попытался удалить =>, но продолжаю получать больше синтаксических ошибок.

syntax error, unexpected =>, expecting '}' ...i.map{ |l| [l.title {:title => l.title.titlecase}] });@out... ...^

ответ

0

Не полный ответ, но по тому, что я знаю, если у вас есть 2 модели, то вместо того, чтобы использовать

profile.rb 
has_one :organisation, as: :orgable 

organisation.rb 
has_many :profiles 

Вы можете просто использовать

profile.rb  
belongs_to :organisation 

organisation.rb  
has_many :profiles 
+0

Привет вредоносных программ. Благодарю. Дополнительный бит необходим, если модель является полиморфной. В любом случае, спасибо. – Mel

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