【发布时间】:2012-05-13 17:38:21
【问题描述】:
背景:用户和社区共享一个
has_many:通过
关系。每个社区都有一个标识它的“community_type”字符串(即“Gender”、“City”等)。
目标:在我的编辑表单中,我想允许用户根据社区类型编辑他的 :community_ids。比如:
<%= form_for current_user do |f| %> <%= f.collection_select(:community_ids, Community.filtered_by("Gender"), :id, :name) %> <%= f.collection_select(:community_ids, Community.filtered_by("City"), :id, :name) %> <% end %>
问题在于表单只接受 :community_ids 的最后一个表单字段值——在本例中是“城市”——而不是将所有这些值合并为一个大的 :community_ids 数组。
解决方案:
对于那些感兴趣的人,我最终从以下答案重构了我的模型代码:
%W[ community1 community2 community3 community4 ].each do |name|
define_method "#{name}" do
self.communities.filtered_by("#{name}").map(&:name)
end
define_method "#{name}_ids" do
self.communities.filtered_by("#{name}").map(&:id)
end
define_method "#{name}_ids=" do |val|
self.community_ids += val
end
end
【问题讨论】:
-
一个问题:您是否只想为您的用户选择每种类型中的一种,或者用户可以选择每种类型中的几种(我只是想弄清楚我们的
select_tags 是否是最好的方法)?
标签: ruby-on-rails ruby-on-rails-3 forms has-many-through