【发布时间】:2017-09-02 00:03:44
【问题描述】:
我是 Ruby on Rails 的新手,所以我对我的搜索功能有几个问题。
搜索视图:
<p>
<%= form_tag students_path, :method => 'get' do %>
<p> Advanced_search: <%= check_box_tag "advanced_search", value = "1" %> </P>
<%= select_tag(:attribute, options_for_select([['Prename',0],['Lastname',1]])) %>
<%= text_field_tag :search%>
<%= submit_tag "Search"%></p>
控制器:
def index
@stud = Student.search(params[:search], params[:advanced_search], params[:attribute])
end
型号:
def self.search(search, advanced_search, attribute)
ary = []
if advanced_search
case attribute
when '0'
ary << Array(where(Student.arel_table[:prename].matches("%#{search}%")))
when '1'
ary << Array(where(Student.arel_table[:lastname].matches("%#{search}%")))
else
raise ArgumentError, 'Something strange happened! problem with select_tag in the search function'
end
elsif search
case attribute
when '0'
ary << Array(where(prename: search))
when '1'
ary << Array(where(lastname: search))
else
raise ArgumentError, 'Something strange happened! problem with select_tag in the search function'
end
else
Student.all
end
ary
end
索引视图:
<% @stud.each do |student_arr|%>
<% student_arr.each do |student| %>
<li> <%= student.prename + " " + student.lastname + " " + student._format_birthday + " DaZ: " + student.daz.to_s%>
(<%= link_to "Details", action: "detail", id: student.id %>)
(<%= link_to "Edit", action: "edit", id: student.id %>) </li>
<% end %>
<% end %>
我的解决方案有效,我没有重复,但代码看起来很糟糕,我不得不说“寻找前或姓氏”。愿任何人都可以帮助我更好的解决方案。 对我来说,如果您只是在寻找学生并且您不必说出您正在寻找的内容(前名或姓氏)并且您没有重复,那将是完美的。也许学生的名字是“彼得彼得”(不好的例子,但它可能会发生^^),所以我只想在我的学生数组中得到彼得一次。此外,我希望可以选择搜索一个明确的名字,所以如果有学生叫“Hans-Peter”,学生叫“Hans”,但我只想找到“Hans”...... 有没有办法用越来越漂亮的代码来解决这个问题?
感谢您的帮助,对不起我的英语不好..我正在尽我所能:) 再见
【问题讨论】:
标签: ruby-on-rails ruby search ruby-on-rails-5