我开始学习 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
。使用这种格式来表示资源本身的属性。/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
标签上,:id
将 id
字段添加到生成的 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/