gpt4 book ai didi

ruby-on-rails - Ruby on Rails - 多个表中的 Where 子句

转载 作者:行者123 更新时间:2023-12-01 11:52:19 25 4
gpt4 key购买 nike

使用 rails 3.2.3。

这让我发疯。我知道事件记录应该可以简化这些类型的操作,但我无法理解它。

我有一个酒店和设施模型。两者都有 has_and_belongs_to_many 关系。一家酒店可以有很多设施,我的目标是按名称/位置、评级和设施搜索酒店。

我可以按前两个进行搜索,但不能按设施进行搜索(它们是搜索表单上的复选框)。

查看代码:

<%= form_tag hotels_path, :method =>'get' do%>
<p>
<b>Location:</b>
<%= text_field_tag :search, params[:search]%><br /><br />


<b>Rating:</b><br />
<%= radio_button_tag :ranking, '5'%>5 Stars<br />
<%= radio_button_tag :ranking, '4'%>4 Stars<br />
<%= radio_button_tag :ranking, '3'%>3 Stars<br />
<%= radio_button_tag :ranking, '10'%>Hostels<br /><br />


<b>Facilities:</b><br />
<% for facility in Facility.find(:all) %>
<div class="field">
<%= check_box_tag "fc[]", facility.id%>
<%= facility.description %>
</div>
<% end %>

<%= submit_tag "Search", :name => nil%>
</p>
<%end%>

酒店管理员:

 def index
@hotels= Hotel.search(params)

respond_to do |format|
format.html
format.json { render :json => @hotels }
end
end

酒店模型:

 def self.search(params)

if params

arel = where('city LIKE ? OR name LIKE ?', "%#{params[:search]}%", "%#{params[:search]}%")
arel = arel.where('ranking = ?', params[:ranking]) if params[:ranking].present?
#arel = arel.where (' = ?', params([:fc])) -> i dont know what to put here

arel
else
all
end
end

基本上它需要获取名称/位置,通过排名缩小范围,然后通过选中的复选框进一步缩小范围。我无法得到最后一个。名称/位置和评级在酒店表中,但每个酒店的设施都在 facilities_hotels 联合表中(该表的键为 hotel_id 和 facility_id)顺便说一句,我能够创建一个拥有我想要的所有设施的酒店,所以两者之间的关系是正确的。

非常感谢任何帮助

最佳答案

您需要添加一个连接子句以使其连接到另一个表。

.joins(:facilities_hotels).where('facilities_hotels.facility_id = ?', params[:fc])

关于ruby-on-rails - Ruby on Rails - 多个表中的 Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10251014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com