我对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或类似的东西,并为不同的链接调用相同的方法?我还是铁杆新手,所以我不确定是否可以做到这一点 - 任何人都能提供的任何帮助都会很棒。
答案 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"