根据点击的链接显示模型数据

时间:2012-01-15 05:55:24

标签: ruby ruby-on-rails-3 variables hyperlink

我对rails和使用rails 3相对较新。我正在尝试创建一个在线词汇表,这样如果用户点击菜单上的“A”,他们将显示该数据库中以“A”开头的条目。

我知道您可以使用不同的页面执行此操作,以便您可以使用'letter_A.html.erb'文件和'letter_B.html.erb'文件等,但我想知道是否可以在同一页面中完成文件,因为我想避免一遍又一遍地重复相同的代码?

我想要的是,如果用户点击链接“D”,他们可能会被带到另一个页面'letter.html.erb',但只能看到以'D'开头的条目。如果他们点击“A”,他们会再次进入同一页面,但只会看到以“A”开头的条目。我认为你必须将一个变量传入link_to函数,但我不知道如何做到这一点。

非常感谢任何帮助。

提前致谢。

我在我的帖子控制器中创建了一个方法,如下所示:

def showletter
@posts = Post.where(:letter => "B")
...
end

并显示以字母B开头的所有条目。但我想知道的是你可以将一个变量传递给你的控制器,以便“B”可以被A..Z之间的变量所取代吗?从这个我希望在我的视图中使用link_to_function或类似的东西,并为不同的链接调用相同的方法?我还是铁杆新手,所以我不确定是否可以做到这一点 - 任何人都能提供的任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

假设您有这样的路线:

get '/glossary/:id', :as => :glossary

现在,在您的索引页面中,您将拥有类似于以下内容的代码:

<% ('a'..'z').to_a.each do |f| %->
  <%= link_to "#{f}", "/glossary/#{f}" %>
<% end %>

<% ('a'..'z').to_a.each do |f| %->
  <%= link_to "#{f}", glossary_path(:id => f) %>
<% end %>

第二个是可取的。阅读更多here。请记住,您可以在rails控制台中试验您的命名路由,如下所示:

$ rails console --sandbox

Loading development environment in sandbox (Rails 3.1.3)
Any modifications you make will be rolled back on exit
ruby-1.9.3-p0 :001 > app.glossary_path(:id => 'a')
 => "/glossary/a"