0

我创建了一个函数,它收集以选定字母/数字开头的模型(称为 Nismo)的所有条目:

def showByLetter(letter)
    @nismosByLetter = Nismo.all :conditions => ['substr(name,1,1) = ?', letter]
end

我的“Nismo”控制器中有这个。

在我的 Nismo 控制器的索引视图中,我有一个按字母顺序排列的菜单,我想使用它来允许用户选择,例如“B”。这将运行 showByLetter 函数,然后在页面中显示以该字母开头的所有条目。

我的问题是,在我的索引页面中,我真的不知道如何让这一切发生:

<% Array('A' .. 'Z').each do |letter| %>
    <%= link_to letter, showByLetter(letter) %>
<% end %>

我猜我需要为这个“showByLetter”函数创建一个新的 view.html.erb 文件来显示它的结果。

我试图从编程程序员的书中了解它,并在网上看到评论,这可能意味着我需要使用 routes.rb 文件来添加类似的东西来获得正确的路线:

namespace "nismo" do
    resources :nismos do
        member do
            get :showByLetter
        end
    end
end

我相信这一切都很简单,但我很困惑,需要一些指示。

任何帮助,将不胜感激!

谢谢

亚当

4

1 回答 1

1

老实说,最简单的方法是在“nismo”控制器中的索引操作中。你能做的就是改变

<%= link_to letter, showByLetter(letter) %>

<%= link_to letter, nismos_path(:letter => letter) %>

它的作用是创建一个返回到当前索引页面的链接,并将其传递给类似于

yourrooturl.com/nismos?letter=A

然后在 Nismo 控制器的 index 操作中,只需添加一个 if 语句来确定是应该加载所有 nismo 还是仅按字母加载。类似于:

if params[:letter].nil?
  @nismos = Nismo.all
else
  @nismos = Nismo.all :conditions => ['substr(name,1,1) = ?', params[:letter]]
end

那应该可以解决您的问题,并且您不必处理路线。

于 2012-07-05T23:35:40.997 回答