Rails 4-使用collection_select进行Ransack - 如何在集合中显示名称而不是ID

时间:2016-11-01 16:11:49

标签: ruby-on-rails

  • 我正在尝试使用ransack通过类别年龄搜索社交名单。
  • 我已成功设法完成此操作,但列出的年龄的ID出现而不是名称
  • 使其更多将列出我文件中的内容
  

模式

socials
t.string   "title"
t.text     "description"
t.string   "address"
t.integer  "category_age_id"

category_ages
t.string   "name"
  

seed.rb

CategoryAge.delete_all
ca01 = CategoryAge.create!(name:'18 - 24')
ca02 = CategoryAge.create!(name:'25 - 34')
ca03 = CategoryAge.create!(name:'All Ages')
  

模型

social.rb
belongs_to :category_age

category_age.rb
has_many :socials
  

控制器

socials_controller.rb
def index
 @search = Social.search(params[:q])
 @socials = @search.result(distinct: true)
 @age = Social.find_by_sql("SELECT category_age_id FROM socials GROUP BY category_age_id").map &:category_age_id
end
  

视图

views/socials/index.html.erb
Age Group: <%= f.select :category_age_id_eq, @age %>

我在views / social / index.html.erb文件中尝试过以下代码,但没有成功

Age Group: <%= f.select :category_age_name_eq, @age %>

我的搜索工作完美但我如何才能显示要显示的类别的名称而不是ID。附上的图片显示了ID,但希望看到例如18 - 24.您的帮助将非常感谢

enter image description here

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点,但我喜欢使用options_for_select并传递一个二维数组,其中第一个值是要保存的值,第二个是你要显示的值。等等,

 <%= f.select :thing, options_for_select([[value_to_save, value_to_show], [another_to_save, another_to_show], [etc, etc]] %>

我写了一个传递数组数组并将其传递给options_for_select

的方法