我开始学习 Rails,我面临一个我认为很简单的问题,但我一直没能找到答案。
我有一个电影目录,索引页显示它显示了几列,我需要将其中两列作为链接​​。此链接将再次重新显示索引页面,但按所选条件排序。
到目前为止,我只添加了一个链接,如下所示:

%th= link_to 'Movie Title', root_path

但是我无法发送 URL 参数,因此我可以在 Controller 中获取它并执行排序。实际控制人如下:
def index
  @movies = Movie.all
end

我想,如果我可以在 Controller 中获得一个参数,那么使用“if”语句就可以完成这项工作。我想像这样的 URL,其中“1”表示按第一个条件排序:
http://www.mysite/1

我看到了这样的解决方案,但我想这不是一个好的选择。请指教。
<%= link_to "Link Title", something__path(:param1 => "value1", :param2 => "value2") %>

我将非常感谢有关如何修改 View 和 Controller 的任何建议。我用谷歌搜索了几个解决方案,但我很难理解这些解决方案。也许有更好的方法来实现这一点。如果是这样,那么我准备好倾听了。

尊敬,
豪尔赫·马尔多纳多

最佳答案

主要问题

这归结为 RESTful 路径设计。这实际上取决于您尝试传递给 Controller ​​并在 URL 中表示的字段类型。

将路径视为访问资源的路径很重要。

一般来说,有两种方式来表示你想要的数据:

  • 作为路径变量:它们的形式是 /path/to/resource/:resourceId 。使用这种格式来表示资源本身的属性。
  • 例如博客帖子的 ID 是博客资源的属性。
  • 作为查询参数:这些的形式是 /path/to/resource?queryKey=queryVal 。将此格式用于元数据和数据操作。
  • 例如您对博客文章进行排序的方式不是博客文章本身的属性,它只是您对它们执行的操作。

  • 力学

    您最初的猜测实际上非常接近。你想要的是这样的:

    在您的 Controller 中:
    movie = Movie.find(params[:id])
    

    在您看来:
    <%= link_to 'View Movie', movie %>
    

    在幕后,Rails 正在执行一些魔术,将其变成看起来与问题中的代码非常相似的东西。不过最好让 Rails 自己执行这个魔术,因为它使以后更容易更改。

    另外,需要明确的是,使用路径变量(而不是查询参数)是最适合您的情况的方法。您可以在此处的文档中阅读有关路由的更多信息:
    http://guides.rubyonrails.org/routing.html

    后续问题

    回答这个问题(我还没有足够的代表发表评论):



    link_to 标签上,:idid 字段添加到生成的 HTML 标签中。

    这:link_to "Articles", articles_path, id: "news", class: "article"
    生成:<a href="/articles" class="article" id="news">Articles</a>
    在此处查看 Rails 文档:
    http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to
    (搜索“CSS 的类和 id 很容易生成:”)

    关于ruby-on-rails - 在 Rails 中传递 URL 中的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42180007/

    10-11 22:20
    查看更多