我正在学习Ruby on Rails并设置了搜索表单并且正在运行。在引脚索引视图中,我可以按标题搜索引脚(帖子)。但是,如果我想通过不在引脚表中的用户名进行搜索并在引脚索引页面上显示结果,我该怎么做?如何从其他表中访问属性? (抱歉新手试图解释我的问题)
引脚控制器
def index
@pins = Pin.search(params[:term])
end
Pin Model
def self.search(term)
if term
where('description LIKE ?', "%#{term}%")
else
order('id DESC')
end
end
_search.html.erb
<%= form_tag(pins_path, method: :get) do %>
<%= text_field_tag :term, params[:term] %>
<%= submit_tag 'Search', description: nil %>
<% end %>
答案 0 :(得分:1)
假设您已经设置了类似
的内容class User < ApplicationRecord
has_many :pins
# the username is stored in the attribute 'username'
end
class Pin < ApplicationRecord
belongs_to :user
end
您可以执行以下操作
# PinsController
def index
terms = params[:term]
username = params[:username]
@pins = Pin
@pins = @pins.where("description LIKE '%?%'", term) if term
@pins = @pins.includes(:user).where("users.username LIKE '%?%'", username) if username
# you may want to sort by id anyway
@pins = @pins.order('id DESC')
end
请注意,为了简洁起见,我将代码直接放到控制器上。您可以重构此操作以在引脚模型中使用您的搜索方法。
# _search.html.erb
<%= form_tag(pins_path, method: :get) do %>
<%= text_field_tag :term, params[:term] %>
<%= text_field_tag :username, params[:username] %>
<%= submit_tag 'Search', description: nil %>
<% end %>
如果您想进行更多搜索和过滤,可以查看ransack gem,但我认为您正在尝试自己解决这个问题。
虽然这些railscast剧集来自过去,但我认为它们适用于当前的rails版本。无论如何,人们可以从他们那里获得观点
另一个好资源是gorails.com(不以任何方式加入联盟!)。我强烈推荐他们作为学习资源
答案 1 :(得分:0)
如果User
和Pin
class User
has_many :pins
end
class Pin
belongs_to :user
end
您可以从:user
加入Pin
并为关联设置条件:
Pin.joins(:user).where('users.username ? AND awesome = ?', 'Max', true)
# or the preferred method
Pin.joins(:user).where(user: { username: 'Max', awesome: true })
请注意,在编写SQL字符串时,我们使用users.username
而不是user.username
,而是指定表名 - 而不是关联。
要根据您可以执行的用户名搜索引脚:
def self.by_username(term)
joins(:user).where('users.username LIKE ?', "%#{term}%")
end