Rails简单表单从数组中选择 - 多态关联

时间:2015-12-30 05:05:40

标签: ruby-on-rails arrays scope simple-form

我正在使用Rails 4创建一个应用程序。我使用Simple Form表示。

我有个人资料模型和组织模型。

协会是:

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" %> 

但这只是一个文本字段。

我试图在我的表单中创建一个select函数来替换该行,该函数引用了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 %>

但是,我得到这个语法错误。我试过删除=&gt;但不断收到更多的语法错误。

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

1 个答案:

答案 0 :(得分:0)

不是一个完整的答案,但据我所知,如果你有2个模型,那么而不是使用

profile.rb
 has_one :organisation, as: :orgable

organisation.rb
 has_many :profiles 

您只需使用

即可
profile.rb    
 belongs_to :organisation

organisation.rb    
 has_many :profiles