我正在我的Rails应用程序中创建一个简单的搜索表单,现在它可以让我搜索Pdform属性。 pdform属于用户,因此pdform模型中有user_id
。
如何搜索用户first_name
并让其显示属于他们的所有PDF格式?
这就是我设置它的方式。
get '/pdforms/history', to: 'pdforms#history'
<%= form_tag pdforms_history_path, :method => 'get' do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag 'Search', :name => nil %>
<% end %>
def history
@pdforms = Pdform.search(params[:search])
end
def self.search(search)
if search
self.where("user.first_name like ?", "%#{search}%")
else
self.all
end
end
答案 0 :(得分:1)
我假设管理员(如评论中所述)应该具有搜索功能,而普通用户应该只能看到自己的Pdforms。
所以,也许你的观点可能包括:
<% if is_admin? %>
<%= form_tag pdforms_history_path, :method => 'get' do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag 'Search', :name => nil %>
<% end %>
<% else %>
<%= link_to 'List', pdforms_history_path %>
<% end %>
然后你的控制器可以做一些事情(从AntonTkachov的答案中大量借用):
def history
if params[:search] and is_admin?
@pdforms = self.joins(:user).where("users.first_name LIKE ? OR users.last_name LIKE ?", "%#{search}%", "%#{search}%")
else
@pdforms = Pdform.where(user: current_user)
end
end
注意:整个is_admin?
事只是一个例子。你需要确保你确实有这样的方法/助手 - 如果你这样做,我不知道。此外,您应该决定是否要在is_admin?
中再次if params[:search] and is_admin?
,以确保用户不会使用该网址。
然后你应该有一个views/pdforms/_history.html.erb
很好地呈现@pdforms
。也许,或许,每个Pdform在一个表的一行上。
答案 1 :(得分:0)
试试这个:
def self.search(search)
if search
self.joins(:user).where("users.first_name LIKE ? OR users.last_name LIKE ?", "%#{search}%", "%#{search}%")
else
self.all
end
end