我如何在 searchkick 中实现关联
How do I implement associations in searchkick
首先,我在文档中阅读的示例显示将关联模型声明为单数 :address,但如果这样做,我会收到错误 Association named 'address' was not found on User;如果我将它更改为复数:addresses,那么我遇到的下一个问题是关联在视图未定义方法“国家/地区”中不起作用...
为什么我要将关联声明为复数以及如何使关联在视图中可用
User.rb:
class User < ActiveRecord::Base
searchkick word_middle: ['full_name', 'description', 'interests']
has_many :addresses
scope :search_import, -> { includes(:addresses) }
search.html.erb:
<% @users.each do |u| %>
<li>
<%= link_to "#{u.first_name} #{u.middle_name} #{u.last_name}", page_path(name: u.name) %>
<% @ua=u.addresses.where("current=?", true) %>
<% if @ua.country=="US" %>
<%= @ua.city %>, <%= @ua.state %> <%= ISO3166::Country.find_country_by_alpha2(@ua.country) %>
<% else %>
<%= @ua.city %>, <%= ISO3166::Country.find_country_by_alpha2(@ua.country) %>
<% end %>
</li>
<% end %>
</ul>
在控制器中,执行此操作:@user = User.includes(:addresses).where(your_query)
使关联随时在视图中可用。
是的 has_many 关联必须是复数:“User has_one
:life
”和“User has_many :passions
”;是否有意义?
最后你的错误: where
returns 一个数组,因为你查询了:"bring me all records which fulfill this condition"。另一方面,find
将带回 1 条特定记录,因为它需要唯一属性或带回与该属性匹配的第一条记录。
您需要做的事情:
你应该这样做(如果你确定你会得到 1
这样的记录,或者你只需要那种类型的一种):
<% @ua=u.addresses.where("current=?", true).first %>
或
如果您需要遍历所有结果数组,则:
<% @ua=u.addresses.where("current=?", true) %>
<% @ua.each do |ua| %>
# Your code for each ua instead of @ua.
<% end %>
快乐学习:)
首先,我在文档中阅读的示例显示将关联模型声明为单数 :address,但如果这样做,我会收到错误 Association named 'address' was not found on User;如果我将它更改为复数:addresses,那么我遇到的下一个问题是关联在视图未定义方法“国家/地区”中不起作用... 为什么我要将关联声明为复数以及如何使关联在视图中可用
User.rb:
class User < ActiveRecord::Base
searchkick word_middle: ['full_name', 'description', 'interests']
has_many :addresses
scope :search_import, -> { includes(:addresses) }
search.html.erb:
<% @users.each do |u| %>
<li>
<%= link_to "#{u.first_name} #{u.middle_name} #{u.last_name}", page_path(name: u.name) %>
<% @ua=u.addresses.where("current=?", true) %>
<% if @ua.country=="US" %>
<%= @ua.city %>, <%= @ua.state %> <%= ISO3166::Country.find_country_by_alpha2(@ua.country) %>
<% else %>
<%= @ua.city %>, <%= ISO3166::Country.find_country_by_alpha2(@ua.country) %>
<% end %>
</li>
<% end %>
</ul>
在控制器中,执行此操作:
@user = User.includes(:addresses).where(your_query)
使关联随时在视图中可用。是的 has_many 关联必须是复数:“
User has_one :life
”和“User has_many :passions
”;是否有意义?最后你的错误:
where
returns 一个数组,因为你查询了:"bring me all records which fulfill this condition"。另一方面,find
将带回 1 条特定记录,因为它需要唯一属性或带回与该属性匹配的第一条记录。您需要做的事情:
你应该这样做(如果你确定你会得到 1 这样的记录,或者你只需要那种类型的一种):
<% @ua=u.addresses.where("current=?", true).first %>
或
如果您需要遍历所有结果数组,则:
<% @ua=u.addresses.where("current=?", true) %>
<% @ua.each do |ua| %>
# Your code for each ua instead of @ua.
<% end %>
快乐学习:)