link_to功能?功能的新观点?

时间:2012-07-04 22:12:52

标签: ruby-on-rails-3

我创建了一个函数,它收集以所选字母/数字开头的模型的所有条目(称为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

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

任何帮助将不胜感激!

由于

亚当

1 个答案:

答案 0 :(得分:1)

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

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

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

这样做会创建一个返回当前索引页面的链接,并将其传递给类似于

的GET参数
yourrooturl.com/nismos?letter=A

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

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

这应解决您的问题,您不必处理路线。