Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails中表的字母过滤器_Ruby On Rails_Sorting_Indexing_Alphabet - Fatal编程技术网

Ruby on rails Rails中表的字母过滤器

Ruby on rails Rails中表的字母过滤器,ruby-on-rails,sorting,indexing,alphabet,Ruby On Rails,Sorting,Indexing,Alphabet,我是rails新手,如果有简单的答案,请原谅我。我正在尝试为rails中的表实现一个“字母表索引”。我希望能够单击一个字母并刷新表-只包含last\u name列的第一个字母与单击的字母匹配的数据 我的第一个想法是从数据库中生成一个字母数组 @visitor_array = [] @v = Visitor.all @v.each do |visitor| @visitor_array << visitor.last_name[0,1] end @visitor_arr

我是rails新手,如果有简单的答案,请原谅我。我正在尝试为rails中的表实现一个“字母表索引”。我希望能够单击一个字母并刷新表-只包含
last\u name
列的第一个字母与单击的字母匹配的数据

我的第一个想法是从数据库中生成一个字母数组

@visitor_array = []
@v = Visitor.all
@v.each do |visitor|
    @visitor_array << visitor.last_name[0,1]
    end
@visitor_array.sort!
@visitor_array.uniq!
@visitor\u数组=[]
@v=访客
@v、 每位访客|
@访问者数组

使用此选项可获得特定字母的结果列表:

visitors = Visitor.order("last_name ASC").where("last_name like '?'", letter)
那么在你看来,

<% @visitor_array.each do |visitor| %>

    <%= link_to visitor(visitor) %>

<% end %>

语法可能有点偏离,但基本思想是存在的


我不完全确定你所说的最后一行是什么意思,但是…

上面语句中的WHERE子句可以改进为
last\u name,比如“?%”
,所以它只以字母开头,假设Rails版本的工作方式与普通SQL类似。好吧,稍微调整一下,这一行代码就可以工作了
@visitors=Visitor.order(“姓氏ASC”)。其中(“姓氏like?”,字母+“%”)
但是,链接部分不起作用。我不希望在单击字母之前对表进行筛选,但如果我将该代码放入控制器中,则我的表将作为筛选加载。我试着把它放进一个helper方法中,但它似乎没有任何作用。是的,我假设如果你在请求中没有收到任何信件,你只需要执行@visitors=Visitor.order(“last_name ASC”),然后离开where off…@Karl:谢谢,答对了。这是在我的脑海中,但在那里和键盘之间的某个地方,小%偏离了轨道…好吧,所以当你点击链接
letter%>
时,我试图将字母作为散列传递回控制器,这样我就可以使用:letter for this conditional statement
if(params[:letter]!=nil)
。但它似乎没有存储散列。
<% @visitor_array.each do |letter| %>
  <%= link_to letter, :controller => "visitors" , :letter => letter %>
<% end %>
visitors = Visitor.order("last_name ASC").where("last_name like '?'", letter)
<% @visitor_array.each do |visitor| %>

    <%= link_to visitor(visitor) %>

<% end %>