Rails - 通过连接表以逗号分隔的列表

时间:2014-01-29 04:37:31

标签: ruby-on-rails list postgresql comma

我有三个表,其中一个表是另外两个表之间的连接表。

  1. 工作:id
  2. 县:id
  3. 郡化:job_ib,county_id
  4. 我想创建一个特定职位与之关联的县名单。我正在尝试使用类似的东西:

    <%= @counties.map { |county| county.id }.join(", ") %>
    

    但这显然没有使用县化表。如何更改上面的代码来完成我需要的?另外,我想按ASC顺序按字母顺序列出各县。

    谢谢!

    P.S。

    我想我应该已经添加了如何在模型中链接我的表格。

    1. 乔布斯:has_many:countyizations&amp; has_many:县,:通过=&gt; :countyizations
    2. 县:has_many:countyizations&amp; has_many:jobs,:through =&gt; :countyizations
    3. 赞助:belongs_to:county&amp; belongs_to:job

2 个答案:

答案 0 :(得分:1)

对于给定的job.id,您可以使用此返回按给定作业过滤的所有counties

<%= @counties.order('name asc').includes(:jobs).where('jobs.id = ?', job.id) %>

根据您的要求替换job.id,您可以在控制器中设置@job实例变量,并在视图中使用。

或者甚至更好地将此代码移动到控制器操作:

# controller
def show
    job_name = ...
    @counties = ...

    @county_jobs = @counties.order('name asc').includes(:jobs).where(jobs.name = ?', job_name)
end

然后在您的视图中,显示所有搜索过的作业的县:

<%= @counties.map(&:id).join.(',') %>

答案 1 :(得分:1)

我不确定我是否理解正确。以下是你想要的吗?

class Job < ActiveRecord::Base
  has_many :countries, :through => :countyizations
end

class County < ActiveRecord::Base
  has_many :jobs, :through => :countyizations
end

<%= @job.counties.sort{|a, b| a.name <=> b.name}.map{ |county| county.name }.join(", ") %>

我认为使用“has_many_and_belongs_to”代替“has_many”也可以。