首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby on Rails中的过滤

Ruby on Rails中的过滤
EN

Stack Overflow用户
提问于 2020-07-16 06:34:41
回答 1查看 29关注 0票数 1

我有一个Ruby on Rails应用程序,其中包含以下资源:宠物、宠物类型、疫苗接种(给宠物接种疫苗的事件)和人员。所以,宠物属于一种类型(一种类型有很多宠物),而疫苗接种属于一只宠物(一只宠物可以有很多疫苗)。我想要做的是:在疫苗接种索引中有一个可折叠的列表(选择)所有宠物类型,这样我就可以按宠物类型过滤疫苗。我的代码如下:

这是疫苗接种控制器中的索引方法:

代码语言:javascript
运行
复制
def index
    if params[:type_id]
      flash[:notice] = "Post successfully created"
      @vaccinations = Vaccination.filter(params[:type_id])
    else
      @vaccinations = Vaccination.all
    end
  end

这是疫苗接种索引中的搜索表单:

代码语言:javascript
运行
复制
<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>

这是我在疫苗接种模型中的过滤方法,我在控制器中调用的方法。

代码语言:javascript
运行
复制
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

发生的情况是,当我没有选择任何宠物类型时,我可以看到每个疫苗接种都是应该的。但是,当我选择任何宠物类型时,无论是哪种类型的宠物已经接种过疫苗,它都不会向我显示任何东西。如果我给一只精选的猫接种了三种疫苗,并进行了过滤,它不会显示任何信息,就好像我没有接种过疫苗一样。这就是我的问题。对不起,我的英语,这不是我的第一语言!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-16 15:24:07

正确的方法是通过关系。

示例(应该可以正常工作,没有测试它):

代码语言:javascript
运行
复制
  def self.filter(type_id)
    Vaccination.joins(pet: :pet_type).where(
      pet_types: {
        id: type_id
      }
    )
  end

现在,您将获得所有已发送类型宠物的疫苗接种列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62924742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档