Rails 4 - 使用'where'搜索&显示某些用户

时间:2015-11-25 14:58:11

标签: ruby-on-rails-4

我有点被困,任何帮助或建议都会非常感激。

我想只显示有简历的用户,但我不确定如何 - 我的文件中有以下编码 - 您的建议&非常感谢帮助。

在我的user / index.html

<% users.each do |user| %>
  <%= user.resume.summary  %>
<% end %>

模式

  create_table "resumes", force: true do |t|
    t.text     "summary"
    t.integer  "user_id"
    t.datetime "created_at"
    t.datetime "updated_at"

模型

user.rb
has_one :resume

resume.rb
belongs_to :user

我想进行仅显示有简历的用户的搜索。 我试过以下但没有运气

<% users.where(resume_id: !nil).each do |user| %>
  <%= user.resume.summary  %>
<% end %>

<% users.where("resume IS NOT NULL != ?", "").each do |user| %>
  <%= user.resume.summary  %>
<% end %>

我尝试写作作为范围,但没有运气

user.rb file
scope :users_with_resumes, -> {where(['resume != ?', nil])}

users/index.html.erb file
<% @users.users_with_resumes.each do |userj| %>
  <%= user.resume.summary  %>
<% end %>

2 个答案:

答案 0 :(得分:2)

您已接近击中标记,但您尝试的语法略有偏差:

# This won't work because you're now searching for the value !nil (or 'true')
<% users.where(resume_id: !nil).each do |user| %>
  <%= user.resume.summary  %>
<% end %>

# This is a double negative, syntactically incorrect, and referencing resume instead of resume_id
<% users.where("resume IS NOT NULL != ?", "").each do |user| %>
  <%= user.resume.summary  %>
<% end %>

您应该使用以下其中一项:

users.where.not(resume_id: nil)

users.where("resume_id IS NOT NULL")

我认为你会发现这些陈述中的任何一个都能满足你的目的,无论是作用还是其他。

答案 1 :(得分:0)

以下代码仅显示具有简历的用户

  

协会

user has_one resume
resume belongs_to user
  

模式

 create_table "resumes", force: true do |t|
    t.text     "summary"
    t.integer  "user_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  

user.rb

scope :users_with_resumes, -> {where("id in (select user_id from resumes)")}

or instead of a scope you can write a method

def self.users_with_resumes
 where("id in (select user_id from resumes)")
end
  

users / index.html.erb [仅显示具有简历的用户]

<% @users.users_with_resumes.each do |user| %>
 <%= user.resume.summary  %>
<% end %>