Rails 5使用参数从URL地址查询

时间:2019-02-07 06:52:30

标签: ruby-on-rails ruby-on-rails-5

如何通过查询生成网址

例如http://localhost:3000/articles

我想要的是,此URL可以与查询一起加载

例如articles?author="author_name"

我应该在控制器中做什么?

编辑:article_controller

def index
@articles = Article.all
end

路线

resources :authors
resources :articles
resources :categories

视图

<% @articles.each do |article| %>
  <tr>
    <td><%= article.no_urut %></td>
    <td><%= article.judul_artikel %></td>
    <td><%= article.konten %></td>
    <td><%= article.category.nama_kategori %></td>
    <td><%= article.author.author_name %></td>
    <td><%= link_to 'Show', article %></td>
    <td><%= link_to 'Edit', edit_article_path(article) %></td>
    <td><%= link_to 'Destroy', article, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>

2 个答案:

答案 0 :(得分:0)

您无需在控制器中执行任何操作,因为articles_path的rails URL路径将路由到http://localhost:3000/articles(提供了正确的路由)

因此,可以通过articles_path(author: 'author_name')传递任何键值,并以控制器params[:author_name]的身份对其进行访问

更新:如果您想通过提供姓名来吸引作者,这是搜索功能,可以使用ranksack

高效地完成。

请参考this查看结果视图

答案 1 :(得分:0)

如雷所说,如果您添加:

<%= link_to articles_path(author: "name_here") %>

将生成网址http://localhost:3000/articles?author=name_here

您可能会发现使用gem可以更轻松地实现按作者姓名搜索文章,但是,如果您只是想在ArticlesController中手动执行此操作,则可以:

def index
  if params[:author]
    @author = params[:author]
    @articles = Article.all.where(author: @author)
  else
    @articles = Article.all
  end
end