【发布时间】:2015-12-30 05:05:40
【问题描述】:
我正在 Rails 4 中制作应用程序。我使用简单表单作为表单。
我有一个档案模型和一个组织模型。
这些关联是:
profile.rb
has_one :organisation, as: :orgable
组织.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 %>
但是,我得到这个语法错误。我已尝试删除 =>,但不断收到更多语法错误。
syntax error, unexpected =>, expecting '}' ...i.map{ |l| [l.title {:title => l.title.titlecase}] } );@out... ... ^
【问题讨论】:
标签: ruby-on-rails arrays scope simple-form