我有一个Ruby on Rails应用程序,其中包含以下资源:宠物、宠物类型、疫苗接种(给宠物接种疫苗的事件)和人员。所以,宠物属于一种类型(一种类型有很多宠物),而疫苗接种属于一只宠物(一只宠物可以有很多疫苗)。我想要做的是:在疫苗接种索引中有一个可折叠的列表(选择)所有宠物类型,这样我就可以按宠物类型过滤疫苗。我的代码如下:
这是疫苗接种控制器中的索引方法:
def index
if params[:type_id]
flash[:notice] = "Post successfully created"
@vaccinations = Vaccination.filter(params[:type_id])
else
@vaccinations = Vaccination.all
end
end
这是疫苗接种索引中的搜索表单:
<form action="/vaccinations" method="GET">
<%= @type_id %>
<select name="type_id">
<option disabled selected value> Select a classification </option>
<% Type.all.each_with_index do | t, index | %>
<option value="<%= t.id %>" <% t.id.to_s == @type_id ? "selected" : "" %>> <%= t.name%> </option>
<% end -%>
</select>
<input type="submit", value="SUBMIT" />
</form>
这是我在疫苗接种模型中的过滤方法,我在控制器中调用的方法。
def self.filter(type_id)
t = Array.new
for v in Vaccination.all
if type_id == v.pet.type.id
t.push(v)
end
end
t
end
发生的情况是,当我没有选择任何宠物类型时,我可以看到每个疫苗接种都是应该的。但是,当我选择任何宠物类型时,无论是哪种类型的宠物已经接种过疫苗,它都不会向我显示任何东西。如果我给一只精选的猫接种了三种疫苗,并进行了过滤,它不会显示任何信息,就好像我没有接种过疫苗一样。这就是我的问题。对不起,我的英语,这不是我的第一语言!
发布于 2020-07-16 15:24:07
正确的方法是通过关系。
示例(应该可以正常工作,没有测试它):
def self.filter(type_id)
Vaccination.joins(pet: :pet_type).where(
pet_types: {
id: type_id
}
)
end
现在,您将获得所有已发送类型宠物的疫苗接种列表。
https://stackoverflow.com/questions/62924742
复制相似问题