Ruby on Rails Active Record Join

时间:2015-06-25 05:21:13

标签: ruby-on-rails activerecord

我需要加入这两张桌子,但我似乎无法做到这一点。

模型

class Registration < ActiveRecord::Base has_many :region end

class Region < ActiveRecord::Base belongs_to :registration end

到目前为止我尝试过的是

`test = Region.joins(:registration)`

这会给我这个结果

[#<Region id: 1, name: "region1">, #<Region id: 1, name: "region1">]

似乎我确实加入了这两个表,但我的困境是我还需要属于注册模型的索引。 about结果只是Region Model中可用的索引。

我也尝试过相反的方式

test = Registration.joins(:region)

但它给了我一个错误

Unknown column 'regions.registration_id' in 'on clause': SELECT {注册{1}} {注册{1}} {区域{1}} {区域{1}} {registration_id {1}} {注册{1}} id``

我确实同意这个错误,因为我没有索引registration_id

3 个答案:

答案 0 :(得分:0)

当你在表中定义belongs_to关系时,表应该具有它所属的表的foreign_key。因此,在您的示例中,如果您有像Region属于注册的关系,则区域应该具有registration_id。看起来你已经定义了错误的关系。

因此,如果您将在Region中定义registration_id并执行以下查询:

Region.joins(:registration) 

您将在结果

中看到区域表的id以及registration_id

希望这有帮助

答案 1 :(得分:0)

更改$('input[id^=date]').on('blur', function() { var lastUsedDateInputValue = $(this).val(); }); 代码

Registration model

然后您可以使用class Registration < ActiveRecord::Base has_many :regions end

joins

希望它有所帮助!

答案 2 :(得分:0)

class Registration < ActiveRecord::Base
    has_many :regions, inverse_of: :registration, dependent: :destroy
 end

class Region < ActiveRecord::Base
    belongs_to :registration, inverse_of: :regions
end

然后,请确保您的Region表格正确显示其与Registration列的关联registration_id。如果它不包含该列,请继续创建以下迁移:

rails g migration add_registration_ref_to_regions registration:references

rake db:migrate

现在,您应该可以通过以下方式成功查询:

Registration.joins(:regions)Region.joins(:registration)

干杯!

相关问题